面向对象有三大特性:继承,封装,多态
1.继承:
(1)继承的特点:A,java支持单根继承,不支持多根继承
B,java支持多层继承(继承体系)
(2)细节注意:A.子类只能继承父类的非私有成员(成员方法和成员变量)
B.子类不能继承父类的构造方法,但是我们可以通过super去访问父类的构造
C.千万不要因为部分功能而去使用继承,在Java当中,我们使用继承体系的时候 应该遵循一个"is a"的原则
(3) 继承中成员变量的关系:
a.子类的变量名和父类的变量名不一致时,各自找各自的
b.子类和的变量名和父类的变量名一致时:
1.先在子类局部中去寻找,有就使用
2.先在子类成员中去寻找,有就使用
3.在去父类的成员位置,有就使用,没有就报错
(4)继承中构造方法的关系:
a.子类中的所有构造方法,都会默认访问父类的无参构造。
b.为什么要访问?
因为子类继承父类会使用到父类的数据,所以子类必须先访问父类的
无参构造,以便将父类的数据进行初始化。
注意:子类的构造默认的第一句代码是super();
如果父类没有提供无参构造,那么会有什么结果?
报错;
如何解决?
a.给父类添加一个无参构造
b.通过super关键字去访问父类的其他构造
2.封装:
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
-
1. 良好的封装能够减少耦合。
-
2. 类内部的结构可以自由修改。
-
3. 可以对成员变量进行更精确的控制。
-
4. 隐藏信息,实现细节。
实现Java封装的步骤
1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
3.多态:
同一个对象,在不同时刻体现出来的不同状态。
举例:
猫是猫,猫是动物
多态的前提:
a.要有继承关系
b.要存在方法的重写
其实方法重写不是多态必须的,但是不这样做就没有任何意义
c.要有父类的引用指向子类的对象
Fu fu = new Zi();
用代码的实现下多态:
多态中成员访问的特点:
a.成员变量
编译期,看左边,运行期看左边
b.成员方法
编译期,看左边,运行期看右边
c.构造方法
创建子类对象的时候,先访问父类构造,对父类的数据进行初始化
d.静态方法
编译期,看左边,运行期看左边
除了成员方法,其余全部看左边,因为成员方法存在方法重写,重写会覆盖父类 所以运行看子类就可以了
多态的好处:
a.提高了代码的可维护性(继承来体现)
b.提高的代码的扩展性(由多态来体现)
多态的弊端:
不能使用子类的特有的功能。
解决方法:
a.直接创建子类对象即可(可以,但是 不合适也不合理。而且非常耗内存)
b.把父类引用直接强制转换为子类引用(向下转型)
注:部分笔记来源于其他网站!!!