Java三大特性之一 继承
概述
extends关键字,使用这个关键字,可以建立父类与子类之间的关系。
子类可以直接继承父类中的公共属性和方法。
优点
- 提高代码的重复利用率
- 避免代码的冗长
子类和父类创建时的注意点:子类与父类所共有的属性和行为,一般在父类中写出,子类中作出补充。
空间上在用子类创建对象是,会在堆内存创建两块空间(子类空间,父类空间),但是看作一体的,对外是一个对象。
继承的特点:
- Java是单继承模式,一个子类只能继承一个直接父类。
- Java不支持多继承,但支持多层继承。
- Java中所有的类都是Object类的子类。
- 子类可以继承父类的属性和行为,但是不能继承父类的构造器。
**子类不能继承父类的构造函数 **
子类有自己的构造器,父类构造器用于初始化父类对象。
继承后成员变量的访问顺序
在子类中访问成员变量时:
- 先寻找局部范围
- 子类成员范围
- 父类成员范围
对于子类和父类中存在同名的成员变量,this 指子类成员变量,super 指父类成员变量。
方法重写
形式:子类和父类中存在一摸一样的方法声明时,子类的方法就是父类方法的重写。
使用情况:方法的重写是父类的方法不能满足子类的方法时使用的。
方法的重写和方法的重载形式类似。
@Override 重写注解
加上该注解后如果重写错误,程序会报错。
在方法重写前写下 @Override 有利于代码的阅读,同时可以判断该重写方法是否正确,更加安全。
重写的注意事项:
- 重写的名称和参数列表必须与被重写方法的相同。
- 私有方法和静态方法不能被重写。
- 子类重写父类方法时,访问权限必须要大于父类的。
构造器
子类在继承了父类之后构造器的特点:
在子类构造器中没有直接写出所访问的父类构造器时,默认在第一行存在 super(); 语句调用父类的无参构造器,来初始化父类构造器。
原因:
1. 子类在初始话时可能会调用父类的成员变量,如果父类没有完成初始话,那子类就无法调用。
2. 子类在初始化之前,需要先完成父类空间的初始化。
父类中的构造函数的写法会影响子类的构造函数的写法
如果父类中的无参构造器被私有化了,这是就需要调用 父类中的其他构造器来进行 子类的初始话,切不可省略。
注意:
this 和 super 不能共存