权限
private | 默认访问权限 | protected | public | |
---|---|---|---|---|
类本身 | 是 | 是 | 是 | 是 |
相同包子类 | 否 | 是 | 是 | 是 |
相同包非子类 | 否 | 是 | 是 | 是 |
不同包子类 | 否 | 否 | 是 | 是 |
不同包非子类 | 否 | 否 | 否 | 是 |
总结:
- 子类继承父类总是可以访问父类protected和public的属性和方法,如果相同包,会更进一步获取默认访问权限的属性以及方法的访问权限.
- 非子类不同包只能访问public的属性和方法,如果相同包,能访问非private修饰的属性和方法.
- 从内存上看,子类继承父类是将子类与父类合并生成新类,子类拥有父类所有的属性和方法,只是不能访问父类私有的,可能还有默认访问权限的.
继承(注解)
子类是否可以继承父类中的注解,不同情况如下:
无@Inherited | 有@Inherited | |
---|---|---|
类上的注解 | 否 | 能 |
抽象方法上的注解(子类已实现) | 否 | 否 |
普通方法上的注解(子类能继承的) | 能 | 能 |
子类覆写父类的方法 | 否 | 否 |
总结:
- @Inherited 只能决定类上的注解是否可以继承
- 方法或者属性是否继承到注解只决定于该方法或属性本身(如果子类已覆写则看子类,否则看父类)