JavaOO面向对象中的注意点(二)
1.封装:
封装主要体现在:组装类 和 信息隐藏。
a.信息隐藏:①访问修饰符:private
②方法的实现:get/set方法、run()方法-控制流程
b.组装类: ①类的定义:属性、构造、行为(方法)、包等
②类的使用:new对象、“.”方法、引用类型数组
2.访问修饰符:
public: 本类、同包(子类 及 非子类) 及 不同包(子类及 非子类) (全类可调用)
protected: 本类、同包(子类 及 非子类) 及 不同包(子类) (同包及子类可调用)
默认访问修饰符:本类、同包(子类 及 非子类) (同包可调用)
private: 本类 (仅仅本类可调用)
3.get/set方法的封装体现:
a.可以只提供get,或者只提供set,把属性变为只读或者只写。
b.get方法可以提供权限验证;set方法可以提供数据有效性校验。
c.可以隐藏内部属性的存放形式。
4.继承:
a.定义:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方法称为继承。
b.子类与父类:
①关系:is—a
②父类(基类、超类):拥有共同的属性、行为
子类(派生类):拥有特有的属性、行为
③关键字:extends
④优缺点:由于java中继承都为单继承,优点为层次清晰,缺点为相比多继承丰富度不够(但接口可以弥补这一点)
⑤Object:所有类和数组的根类
c.内存叠加:先生成父类对象部分,再生成子类特有部分,最后形成完整的子类对象。
d.注意:构造方法不能被继承,更不能被重写。
5.重写与重载:
a.重写:子类将父类继承来的方法,重新实现一次。(有继承关系的类之间)
b.重载:在同一个类中,拥有多个同名方法,但参数列表不同,各有各的实现。(同一个类中)
c.重写必须满足:
①方法名必须保持一致
②参数列表必须保持一致(个数、类型、顺序)
③返回类型必须保持一致
④访问修饰符必须大于等于父类
⑤子类重写后的方法不能抛出比父类重写前的方法更多的异常。
注:这里的“更多”不也是指throw后面的异常个数更多,而是指范围更大。
6.toString():
a.作用:返回一个对象的字符串描述
//全类名+at+引用(哈希码加密后的地址) com.lovo.bean.Employee@145c859
b.使用:①当我们打印对象,或者在对对象进行字符串操作时就是在调用该对象的toString()方法。
②自于Objiect的toString()返回的是“全类名+at+返回的16进制引用”。我们可以根据需要重写toString()。
7.this 与 super
a.属性及方法(xxx.):
①this代表当前对象;super代表当前对象的父类部分
②this能操作定义在本子类上的所有属性和方法;super不能操作定义在本子类上的属性和方法
③this和super 都只能操作定义在父类上的被访问修饰符允许访问的属性和方法;
总结:首选用this,只有当本类中调用被重写方法重写前的效果时,才用super。
8.== 与 .equals
a.==:判断两个引用是否指向同一个对象。
b. .equals:判断两个对象在业务上是否相等。(大部分时候需要自己定义重写)
9.final 关键字:
a.修饰类时:这个类不能被继承(最终类/终态类/太监类)
b.修饰方法时:该方法不能被重写
c.修饰变量时:常量,不能被修改
10.static 关键字:
a.修饰属性:①用法:可以使用 类. 和 对象.
②效果:全类共享一个值
③内存:在加载期,存放在数据段的静态区里
b.修饰方法:①用法:可以使用 类. 和 对象.
②效果:不能操作到本类的非静态属性或方法,也不能操作this或super对象
③机制:因优先加载而不能操作非静态内容。(由于与对象无关,有可能没有对象)
c.修饰初始化块:静态初始化块(见11条)
d.修饰类:成员内部类的特例——静态内部类(见13条)
e.静态的特点:①凡是static的,都跟对象(本类的对象)无关,都是类级别的
②凡是static的,都在加载期会有特殊处理
11.初始化块:
a.实例初始化块:
①该代码块在new对象的构造时被自动执行,new一次就执行一次
②new对象的构造方法要执行4步,该代码块在第3步之前执行,即在对对象进项初始化之前。
③因此现在初始化块中对属性进行赋值,会被第3步的赋值覆盖
{ /*语句块*/ }
b.静态初始化块:
①该代码块在加载class的时候就被自动执行了
②一个类只加载一次,所以静态初始化块也只执行一次
③所以很多 打开资源、开启链接 的预加载动作可以写到静态初始化块中
static { /*语句块*/ }
12.内部类:
a.定义:在java中,还可以在类的内部定义类,这种在类内部定义的类,称为内部类
b.特点:①一个独立的类,拥有各自的属性、行为、构造等等
②独立的一个class文件
③同样需要编译
④同样可以产生对象
c.分类:成员内部类(特例:静态内部类)、局部内部类(特例:匿名内部类)
13.成员内部类:
a.位置:直接写在外部类当中,位置与属性、构造、方法平行
b.修饰符:可以有访问修饰符,代表是否可以在外部的类使用
不管带什么访问修饰符,本类(外部类)的所有方法都可以使用
c.class文件名字:外部类类名+$+内部类类名
d.在外部使用:首先产生外部类对象、然后使用特殊语法 (外部类.new) 产生内部类对象,然后调用内部类对象的方法
OutClass out = new OutClass(); OutClass.InnerClass1 oi = out.new InnerClass1();
e.静态内部类——成员内部类的特例:
在外部使用静态内部类:可以用外类类名直接访问操作,无需产生外部类对象
OutClass.InnerClass2 oi = out.new InnerClass2();
f.注意:①内部类如果要调用外部类的属性,请书写:
OutClass.this.a = 100;
②静态内部类只能使用外部类的静态属性或静态方法,请书写:
OutClass.b = 100;
14.局部内部类:
a.位置:在java中将类定义在方法的内部,成为局部内部类
b.修饰符:无访问修饰符
c.class文件名字:外部类类名+$+序号+内部类类名
e.使用:直接产生对象
f.匿名内部类——局部内部类的特例:
①class文件名字:外部类类名+$+序号
②作用:在产生对象的同时去定义这个类,只能用一次
new Object(){ /*属性*/ /*行为*/ }
g.注意:局部内部类 及 匿名内部类 不能操作它所在方法的局部变量(非常特殊)
15.多态
a.宗旨:★相同的行为,不同是实现★
b.分类:①静态多态:在编译期即确定行为实行的效果
②动态多态:在编译期不能确定方法实行的效果,运行之后根据绑定对象的不同才能确定该方法最终执行的效果
c.实现:静态多态:重载实现
动态多态:动态绑定、重写实现 (共同使用)
动态绑定:转型技术、instanceof关键字
16.转型技术
a.基本数据类型的转型:
①自动类型转换——小范围的数据类型往大范围的数据类型转换(无风险/肯定成功)
②强制类型转换——大范围的数据类型往小范围的数据类型转换(有风险/丢失精度/无意义)
b.引用数据类型的转化:(前提:有继承关系)
①向上类型转换——自动类型转换(无风险/肯定成功)
②向下类型转换——强制类型转换(有风险/可能会抛出异常、终止运行)
注意:只有运行起来以后,确定时本类对象,或者父类引用指向子类对象才可以成功
17.instanceof关键字(运算符)
a.作用:用于判断运行时对象的真正类型(即判断某对象是否是某个类的实例)
b.返回:true 或 false
c.语法:
/*对象*/ instanceof /*类名*/
18.抽象:
a.abstract关键字:
①修饰方法:表示类有这个方法,但不能这个方法的实现,应该由它的子类去确定 (不能修饰构造、属性)
public abstract void response();
②修饰类:表示这个类是抽象类。抽象类不能产生对象!!!它只能当父类!!!
public abstract class Girl{ //TODO }
b.注意:①有抽象方法的类,一定是抽象类
②抽象类不一定有抽象方法(但失去了抽象设计的意义)
③抽象类除了有abstract修饰符,它内部跟普通类一样,可以有:属性、构造、已实现的方法。
转载于:https://www.cnblogs.com/vettel0329/p/6155311.html
JavaOO面向对象中的注意点(二)相关推荐
- Python面向对象中反射和双下的正确用法
一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...
- 工作单元php,PHP面向对象中的工作单元是什么
PHP面向对象中的工作单元是什么 发布时间:2020-12-18 14:59:32 来源:亿速云 阅读:89 作者:Leah 本篇文章为大家展示了PHP面向对象中的工作单元是什么,内容简明扼要并且容易 ...
- java面向对象中的抽象,类与对象
一.抽象 什么是抽象?将鸽子和麻雀看做是鸟,这是抽象:将整个空调的行为用遥控代替,遥控就可以看做是空调的抽象:将外貌,种族,语言等等形形色色不同的个体看做是人这样一个概念,这也是抽象. 在编程语言中, ...
- 面向对象程序设计上机练习十二(运算符重载)
面向对象程序设计上机练习十二(运算符重载) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descriptio ...
- 函数式编程中的战斗机(二) --运用elm语言MUV设计模式做一个简单的应用实例
@函数式编程中的战斗机(二) -运用elm语言MUV设计模式做一个简单的应用实例 1 elm语言设计模式的特点 1.1 面向对象设计模式的特点 每种编程语言都有其独特的语法和优缺点,从而导致与众不同的 ...
- php 静态类内存,php面向对象中static静态属性与方法的内存位置分析
本文实例分析了php面向对象中static静态属性与方法的内存位置.分享给大家供大家参考.具体如下: static静态属性的内存位置-->类,而不是对象.下面做测试来证明一下 header(&q ...
- WPF中的动画——(二)From/To/By 动画
原文:WPF中的动画--(二)From/To/By 动画 我们所实现的的动画中,很大一部分是让一个属性在起始值和结束值之间变化,例如,我在前文中实现的改变宽度的动画: var widthAnimati ...
- python中如何创建类的对象_python面向对象中如何建立具体的对象?
我们现在眼前所能看到的事物,都是具体的对象.很多小伙伴在面向对象中创建对象,其实都停留在对象名称的建立,计算机中并没有具体对象的描述属性.我们想要使用python中的类,建立的对象就需要是具体的.下面 ...
- 二维数组更改vue_使用vue中的v-for遍历二维数组的方法
如下所示: {{itemss}} 其中,data数据为: this.data = [ [ { type: '', name: '资产', start: '期末余额', end: '期初余额' }, { ...
最新文章
- MaterialImageView
- AJAX POST 请求
- vue 无法进入response拦截器_vue拦截器的一次实践
- 算法复杂度分析(下):最好、最坏、平均、均摊等时间复杂度概述
- c语言程序设计华北电力大学,2016年华北电力大学电气与电子工程学院C语言程序设计(同等学力加试)考研复试题库...
- 批量画同心不同半径圆lisp_cad绘制同心圆lisp二次开发源代码
- Android进阶——深入浅出Handler(一)
- 网络协议栈深入分析(一)--与sk_buff有关的几个重要的数据结构
- 强大的网页性能测试工具--Speed Tracer
- 图像局部特征(二十)--Textons
- 图像直方图规定化 matlab代码,MATLAB图像直方图规定化问题
- 软考中级软件设计师---下午题
- 12级计算机动画制作专业,计算机专业技术12级是什么意思?
- 看《岭南大医生》羽素与专家共揭痘痘背后的问题
- Revel后台管理框架
- mhl数据线_mhl接口有什么作用
- 用tig来查看git log
- Itext生成pdf文件,itext+Freemarker生成pdf,(中文空白解决)
- 【测试】软件测试之黑盒、白盒、灰盒测试
- 将台式机组成云服务器_如何用parsec软件搭建自己的云游戏平台 篇三:自己搭建云服务器,一次折腾,全家/全国收益...
热门文章
- break 跳出两层甚至多层 for 循环
- L1-021 重要的话说三遍 (5 分) 含解题思路 C语言
- 攻防世界 Crypto sherlock
- IEEE Transactions on Intelligent Transportation Systems投稿经验分享
- 如何偷改 millis( ) 与 micros( )的值方便测试(教程)(定时器相关)
- 【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】
- html中轮播图跳转,纯 CSS 实现轮播图
- springboot+shardingsphere温故而知新
- 【号外】支付宝小程序,惊呆我的小伙伴
- DA1458x使用之第一篇——GPIO