其实在咱们面向对象这一阶段的学习中,咱们就是围绕Java的三大特性(封装、继承、多态)来说解的,在上一掌内容中咱们讲解了一部分封装的有关知识,今天咱们来重点学习继承的学习。java
继承就是在一个已有类的基础上派生出新类ide
子类继承父类的特征和行为,使得子类对象(实例)具备父类的实例域和方法,或子类从父类继承方法,使得子类具备父类相同的行为学习
(父类更通用,子类更具体)this
A:提升了代码的复用性spa
B:提升了代码的维护性(经过少许的修改,知足不断变化的具体要求)code
C:让类与类产生了一个关系,是多态的前提对象
有共同的属性或操做blog
有细微的差异继承
A:让类的耦合性加强。这样某个类的改变就会影响其余和该类相关的类rem
·原则:低耦合,高内聚。
·耦合:类与类的关系
·内聚:本身完成某件事情的能力
B:打破了封装性
特色:
A:Java只支持单继承,不支持多继承(C++支持)
B:Java支持多层继承(继承体系)
儿子继承爸爸 爸爸继承爷爷 儿子能够经过爸爸继承爷爷
注意:
A: 子类只能继承父类全部非私有成员(成员方法和成员变量)
B:子类不能继承父类的构造方法,可是能够经过super关键字去访问方法
C: 不要为了部分功能而继承(多层继承会使得子类继承多余的方法)
A:成员变量
a:子类的成员变量名称和父类中的成员变量名称不同,这个太简单
b:子类的成员变量名称和父类中的成员变量名称同样,这个怎么访问
子类的方法访问变量的查找顺序:
·在子类方法的局部范围找,有就使用。
·在子类的成员范围找,有就使用。
·在父类的成员范围找,有就使用。
·找不到,就报错。
不只要输出局部范围的num,还要输出本类成员范围的num
使用super关键字
this 表明本类对应的引用
Super 表明父亲存储空间的标识(能够理解为父亲引用)能够操做父亲 的成员
A:调用成员变量
·this.成员变量 调用本类的成员变量
·super.成员变量 调用父类的成员变量
B:调用构造方法
·this(...) 调用本类的成员变量
·Super(...)调用父类的成员变量
C:调用成员方法
·this.成员方法 调用本类的成员方法
·super.成员方法 调用父类的成员方法
A:子类中全部的构造方法默认都会访问父类中空参数的构造方法
B:理由:
由于子类会继承父类中的数据,可能还会使用父类的数据
因此,子类初始化以前,必定要先完成父类数据的初始化
注意:子类每个构造方法的第一条语句默认都是:super()
若是父类没有无参构造方法,那么子类的构造方法会出现什么现象?
报错
解决方法:
A:在父类中加一个无参构造方法
B:经过使用super关键字去显示的调用父类的带参构造方法
C:子类经过this去调用本类的其余构造方法
子类中必定要有一个去访问父类的构造方法,不然父类数据就没 有初始化。
注意事项;
this(...)或者super(...)必须出如今第一条语句上。
不然就可能对父类的数据进行了屡次初始化
子类中的方法和父类中的方法声明同样
经过子类调用方法:
·先找子类中,看有没有这个方法,有就使用
·再看父类中,看有没有这个方法,有就是用
·若是没有就报错(不去看父亲的父亲)
方法重写:子类中出现了和父类中方法声明如出一辙的方法
(区别于方法重载,方法重载仅仅是方法名同样)
子类重写的应用:当子类须要父类的功能,而功能主体子类又有本身特有的内容时,这样既沿袭了父类的功能,又定义了子类特有的功能
super.方法名(参数名); //避免重复代码
final 关键字声明类能够把类定义为不能继承的,即最终类;
或者用于修饰方法,该方法不能被子类重写:
Final修饰变量的初始化时机
·被final修饰的变量只能赋值一次
·在构造方法完毕前(非静态的常量)
//声明方法 final class 类名{//类体} //声明类 修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
若是内容中有什么不足,或者错误的地方,欢迎你们给我留言提出意见, 蟹蟹你们 !^_^
若是能帮到你的话,那就来关注我吧!
在这里的咱们素不相识,却都在为了本身的梦而努力 ❤一个坚持推送原创Java技术的公众号:理想二旬不止