至于修饰符,子类方法的修饰符范围与父类相同或者比父类的范围大,比如父类为default方法,子类重写的方法修饰符可以是default或public等,但不可以是private,若为private则会报错 ,它们范围关系为:public>protected>default>private
public
- public修饰的类可以被继承
- public修饰的方法可以被继承,可以被重写
- public修饰的变量可以被继承,可以被修改,使用super或者父类对象引用
protected
- protected不可以用来修饰类,继承概念没有意义
- protected修饰的方法可以被继承,可以被重写
- protected修饰的变量可以被继承,可以被修改,使用super或者父类对象引用
default
- default修饰的类可以被继承
- default修饰的方法可以被继承,可以被重写
- default修饰的变量可以被继承,可以被修改,使用super或者父类对象引用
private
- private不可以用来修饰外部类,可修饰内部类,因为内部类相当于成员方法,如果类可以使用private来修饰,表示该包下的这个类不能被其它类访问,那么该类也失去了存在的意义的作用继承概念没有意义
- private修饰的方法可以被继承,但被隐藏,且无法访问
- private修饰的变量可以被继承,但被隐藏,一般无法访问,除非在父类private变量设置getter/setter方法
进行延伸final和static
final
- final修饰的类不可被继承
- final修饰的方法可以被继承,但不可以被重写
- final修饰的变量可以被继承,但不可以被改变
static
- static不可以用来修饰外部类(可修饰内部类,因为内部类相当于成员方法),继承概念没有意义
- static修饰的方法可以被继承,但是不能被重写,因为静态方法是类在加载时就被加载到内存中的方法,在整个运行过程中保持不变(非静态方法是在对象实例化时才单独申请内存空间,为每一个实例分配独立的运行内存,因而可以重写),而是被隐藏,当子类也创建同名的静态方法时也会显示,但是这不是重写来的,而是子类本身的static方法,static是系统级别的,与所在的类共存亡。
- static修饰的变量可以被继承,可以被改变,但这里的改变与static修饰的方法的改变原理是一样的,是被隐藏
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |