Java中的继承
- 在java中类与类之间只能是单继承,接口与接口之间可以多继承
文章目录
一、继承的产生的原因
- 为了实现代码重用
二、继承的规则
- 只能发生在类与类,接口与接口之间
- 使用extends关键字
- 父类的构造器不能被继承
- 类和类之间只能单继承(一个父亲,多个孩子);接口与接口之间是多继承
- final修饰的类不能被继承
三、super关键字
- 我们都知道this是代表当前类对象,那么super代表的是父类空间的引用
- 和this()类似,super()代表的是调用父类构造器,且必须是在本类构造器中,所以应该构造器中不能同时出现this(),super();
- 和this不同,super不能直接打印,因为super并没有直接创建父类对象,而是将父类的属性和方法直接加载到子类的内存中
四、方法重写
1、产生条件?
- 发生子父类之间
- 发生在接口和实现类之间
2、构成重写的规则
- 相同的方法名、参数列表和返回类型(返回类型可以不同,但必须是被重写方法返回类型的子类型)
- 访问权限不能被变小
- 抛出的异常不能扩大
3、父类不能被重写的方法
- 被private修饰的方法,或者在不同包被default修饰的方法
- 静态方法
五、对于继承的一些思考
1、为什么java中只有单继承?单继承有什么好处?
- 当继承多个类时,可能这多个类中有一样的方法,子类调用该方法,就无法判别具体应该调用哪个方法
- 当实现多个接口时,因为接口中只能是抽象方法,如果是同一抽象方法,那么他们实现类实现那个方法是两个接口公共的实现方法
2、哪种访问权限修饰符修饰的方法(属性)可以在子类中直接使用?
- public protected 一定可以在子类调用
- default 只能在同包子类中调用
- private 一定不能在子类中调用
3、子类重写的方法在父类调用,调用的是谁的方法?
- 调用一个方法,先看子类有没有,再看父类方法有没有;如果父类方法有,但是是private修饰的会编译报错,提示没有该方法不可见;如果都没有,那就调用不了该方法
- 如果调用的方法是子类重写之后的,这不管在哪里调用,调用的都是重写之后的方法
父类构造器调用本类方法
class Father {
public Father() {
paly();
}
public void paly() {
System.out.println("Father's play method");
}
}
class Son extends Father{
public void paly() {
System.out.println("Son's play method");
}
public static void main(String[] args) {
new Son();
}
}