首先我们需要将继承和访问修饰符分开来,以前我总是将两者混为一谈,这也是导致我对继承还不够了解的主要原因。
首先 ,继承:
继承并不是说,子类拥有了父类的属性、方法,而是子类拥有父类对象的完整拷贝。
但是我们会发现即使子类拥有了父类的完整拷贝,但是当被不同的访问修饰符修饰的变量或者方法的时候,子类并不能那么直接地就能访问到。
public | public的子类可以直接继承使用 |
protected | 子类可以继承使用 |
default | 如果子类和父类同包可以继承使用,不同包则不能直接使用 |
private | 子类不能直接使用 |
访问修饰符,说的是在其他类中对本类对象属性或者方法的操作读取权限
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N(区分同包和不同包) | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
区别:访问修饰符,说的是本类对象在其他类中的可见性,而继承说的是在子类对象中,对于继承父类而来的属性的访问权限
诶?如果是自己的属性为什么自己却没权限呢?这恰恰说明继承不是说子类拥有了父类的属性、方法,而是子类对象拥有了父类对象啊。