java中的继承
1.特点
继承首先是一种代码复用的体现。
它会分析出共同点,然后将相同的逻辑定义在一个类中。
以学生和老师为例:
比如说要定义一个学生对象:
属性:
姓名
年龄
学号
性别
行为:
吃
学习
睡觉
在比如要定义一个老师类:
属性:
姓名
性别
年龄
工号
行为:
吃
睡觉
讲课
共同点(人):
属性:
姓名
年龄
性别
行为:
吃
睡
让老师和学生 继承 人,这样的话,它里面定义的那些属性和行为就天生具备了。
继承的格式:
class 子类 extends 父类{
}
继承的好处:
- 提高了代码的复用性
- 提高了代码的可维护性
- 通过继承其实父类和子类、子类和子类之间产生了关系。而这个关系时多态的前提。
2.Java中继承的特点
- Java中只支持单继承
- 一个类最多只能有一个父类。
- 多个类可以继承同一个父类
- Java支持多层继承
3.继承中的注意事项
-
继承只能继承父类中非私有的成员。(非private)
-
构造方法不能被继承。
- 子类必须通过
super
关键字来调用父类的构造方法。
- 子类必须通过
-
不要为了继承而继承。
- 当问题中出现
is a
的关系的时候,考虑用继承 - 水果和苹果。
- 人和学生。
- 当问题中出现
-
java只支持单继承
-
一个类可以被多个子类继承
-
支持多层继承
4.继承中成员变量的关系
当子类中的成员变量和父类中非私有的成员变量同名时,默认访问的是子类中的成员变量。
如果确实要访问父类的,需要配合 super关键字。
5.关于super/this
//父类继承下来的成员变量
super.成员变量;
//调用父类的构造方法
super(...);
//调用父类继承下来的成员方法。
super.成员方法();
super.变量名;
this.变量名;
super.方法名(); --- 重写 override
this.方法名();
super(); 父类的构造方法
this();自己的构造方法
6.继承中构造方法的细节
子类中的所有构造方法默认都会访问父类的公共无参的构造方法
子类中所有构造方法的第一条指令,默认都是 super()
当父类没有公共无参的构造方法时,子类的构造方法中必须明确使用 super(xxx)
来调用父类的构造方法,且必须是第一条指令。
- 当配合
this()
使用时,特例。但是不管怎么样,this()
也好super()
也好,必须是构造方法中的第一条指令。
class Fu{
public Fu(int a){
}
}
class Zi extends Fu{
private int a ;
public Zi(){
super(2);
}
public Zi(int a){
this();
}
7.继承中成员方法的细节
当子类中不存在某些成员方法时,会自动从父类中获取。
如果子类中存在与父类非私有的方法名,参数列表相同的方法
- 要求返回值也一模一样
- 权限修饰符要求子类不能比父类(权限更小)public >protected>friendly>private
- 这种现象称为“方法重写(override)”
重写的应用点:
- 子类要重新实现父类的某些功能
- 子类扩展父类的某些功能,配合
super.父类方法()
来扩展。 - 当父类中有静态方法时,如果子类想 “重写” ,要求子类的方法签名必须跟父类一致。但是静态方法不能出现super /this