继承
继承的实现
1.概念:继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法。
2.格式:class 子类 extends 父类。
3.应用场景:谁是谁的一种。例如:老师和学生是人的一种,人是父类,学生和老师是子类。
继承成员访问特点
继承中变量的访问特点
1.就近原则:
子类局部范围找–子类成员范围找–父类成员范围找–报错
2.this和super关键字:
- this :代表本类对象的引用
- super :代表父类存储空间的标识(可以理解为父类对象引用)
this/super.成员变量
this/super.成员方法
this/super.(…) 构造方法
继承中构造方法的访问特点
1.子类中所有的构造方法默认都会访问父类中无参的构造方法。
2.若父类没有构造方法(建议使用第二种):
- 通过使用super关键字去显示的调用父类的带参构造方法
- 在父类中自己提供一个无参构造方法
继承中成员方法的访问特点
子类成员范围找–父类成员范围找–报错
super内存图
方法重写
1.子类和父类方法名一样,参数列表也一样,用Override来注解判断是否重写错误。
2.私有方法不能被重写。
3.子类方法访问权限不能更低(public>默认>私有)
继承的注意事项
1.Java中类只支持单继承,不支持多继承。
2.Java中类支持多层继承。
修饰符
权限修饰符
状态修饰符
final
1.final 修饰类、方法、变量的效果:
- fianl 修饰类:该类不能被继承(不能有子类,但是可以有父类)
- final 修饰方法:该方法不能被重写
- final 修饰变量:表明该变量是一个常量,不能再次赋值
2.fianl 修饰基本/引用数据类型变量:
- 基本数据类型变量:数据值不能发生改变
- 引用数据类型变量:地址值不能发生改变,但是地址里面的 内容是可以发生改变的
public static void main(String[] args){
final Student s = new Student(23);
s = new Student(24); // 错误
s.setAge(24); // 正确
}
static
1.可修饰成员变量和成员方法(不能使用this关键字),是属于类的。
2.被类的所有对象共享。
3.通过类名和对象名都可以调用,建议使用类名。
4.静态成员方法只能访问静态成员(变量或方法),而非静态成员方法静态和非静态的都可以访问。