一、访问修饰符
修饰符 |
范围 |
继承描述 |
备注1 |
备注2 |
private |
本类内部 | 一定不能继承 |
私有的 |
其实是继承了,但不能访问 |
default |
本类+同包的类 |
不一定能继承 |
若不写修饰符时则是默认的 default; 但default不能显式地修饰成员,只能采用不写的方式 |
若父子类同包则能继承; 若父子类不同包则不能继承 |
protected | 本类+同包+不同包的子类 | 一定能继承 | 受保护的 | 同包,不同包的父子类都能继承 |
public | 公开的所有的类 | 一定能继承 | 公开的 |
二、属性和方法覆盖
方法覆盖:
(1) 方法覆盖的条件是父子类方法名,参数表,返回类型全部相同才能覆盖
(2) 父子类的方法覆盖是指当父类引用指向子类对象时,会执行子类的覆盖方法
(3) 子类方法修饰符的范围要比父类的宽才能覆盖
(4) 子类方法抛出的异常不能超过父类的异常才能覆盖
属性覆盖:
(1) 创建子类对象 ClassB cb=new ClassB(),会先创建父类ClassA对象,子类对象创建后,
则必然有2个实例变量a,一个是父类的a=20,另一个是子类自己的a=10。
当我们用this.a访问时访问的是子类自己的实例变量a=10,这就是子类属性遮盖父类属性。
(2) 当子类中的属性与父类属性同名时,则子类属性会遮盖父类属性
一定想要在子类中访问继承父类的同名属性,使用super.属性名来访问
访问父类继承的方法而非子类覆盖的方法也用super.方法名来调用