黑马程序员技术交流社区
标题: 关于继承 [打印本页]
作者: 0825梁磊 时间: 2015-9-10 13:05
标题: 关于继承
继承☆
(1)多个类中存在相同的属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需在定义这些属性和行为,只要继承那个类即可。
(2)用关键字extends表示,格式如下:
class子类名 extends 父类名 {}
单独的这个类叫父类,基类或者超类;这多个类可以称为子类或者派生类
(3)继承的好处:
A:提高了代码的复用性
B:提高了代码的维护性
C:让类与类产生了一个关系,是多态的前提(其实这也是弊端,类的耦合性很强)
(4)继承的弊端:
A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。
开发的原则:低耦合,高内聚。
耦合:类与类的关系
内聚:自己完成某件事情的能力
B:打破了封装性
(5)Java中继承的特点
A:Java中类只支持单继承,不支持多继承
有些语言是支持多继承的,格式:extends 类1,类2....
B:Java中可以多层继承(儿子--父亲--爷爷)
(6)继承的注意事项:
A:子类只能继承父类的非私有成员(方法和变量)
B:子类不能继承父类的构造方法,但是可以通过super去访问
C:不要为了部分功能而去继承
(7)什么时候使用继承呢?
A:继承体现的是:is a的关系。
person
student
teacher
水果
香蕉
苹果
B:采用假设法
如果有两个类A、B,只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承
Java继承中的成员关系
A:成员变量
当子类的成员变量名称和父类中的成员变量名称一样时,类的方法访问变量的查找顺序如下:
在子类方法的局部范围找,有就使用。
在子类的成员范围找,有就使用。
在父类的成员范围找,有就使用。
找不到,就报错。
B:构造方法
子类中所有的构造方法默认会去访问父类的无参构造方法
为什么呢?
因为子类会继承父类中的数据,可能还会使用父类的数据,所以,子类在 初始化之前,一定要先完成父类数据的初始化。
注意:
子类的每一个构造方法的第一条语句默认都是:super()
super()代表访问父类的无参构造方法
父类中如果没有无参构造方法会出现什么现象呢?如何解决呢?
报错。
如何解决呢?
(1)在父类中加一个无参构造方法
(2)子类通过super去明确访问父类的带参构造方法
(3)子类通过this调用本身的其他构造
注意:
this(...)和super(...)一定要出现第一句语句上,如果不是放在第一句,就可能对父类的数据进行了多次初始化,所以必须放在第一句
子类中一定要有一个去访问父类的构造,不管是有参的还是无参的构造,这样就能完成父类数据的初始化
C:成员方法
当子类的成员方法名称和父类中的成员方法名称一样时,类访问方法的查找顺序:
在子类中找,有就使用。
在父类中找,有就使用。
找不到,就报错。
初始化
A:一个类的初始化过程
成员变量初始化
默认初始化
显示初始化
构造方法初始化
B:子父类的初始化过程(分层初始化)
先进行父类初始化,再进行子类初始化
super()仅仅代表先初始化父类,而不存在什么方法内外的问题,等父类初始化完了之后,在从头到尾去初始化子类
作者: WOJIAOLIZHEN01 时间: 2015-9-10 14:26
很详细的知识点
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |