Public:对所有类可见
Protected:对同一包中的类,和子类可见
Private:仅对类本身可见
Default:对同一包中的类可见
为了理解方便,可见的意思也就是可以使用这个特性(域,方法,类),对子类可见就是子类也具有这些特性。但是继承的时候,子类从父亲继承来的那些东西,他们的权限仍然是保持不变的,子类是具有这些特性,但是你能不能使用子类的这些特性,取决于这些特性的权限修饰符,如果你和子类在一个包,那么子类继承父亲的所有特性你都可以使用,如果你和子类不在同一个包,那么子类继承父类的特性,你只能使用public的。
package1:Parent,ChildClass1,TestInheritance
package2:ChildClass2,TestInheritance
package3:TestInheritance
继承的时候,属性的继承原则和方法的继承原则完全相同,所以我们以属性为例子。
Public class Parent{
Child1会继成所有public,protced,属性,又因为和父类在同一个包中所以还会继承默认属性,也就是a,b,c
Child2会继成所有public,protced,属性,但是因为和父类在不同包中,所以并不能继承默认级别属性,也就是a,b
但是需要注意的是这些特性依然属于父类的特性,你在使用这些子类的时候,使用的也是父类的特性,父类里面那些特性哪些对你可见,取决于你想对于父类的位置,和这些特性的修饰符。而不是你想对于子类的特性。
假设现在有一个Test类,它可能在package1,package2,package3中:
Package1中,则可以看见Child1中所有三种属性,a,b,c;而Child2的属性能看到它所继承的特性之中,想对于父类你可见的时a,b.
Package2中,则可看见Child1中public属性a,因为它的另外两个属性是protected和默认级别,所以不可见。而Child2中也只能看到a.
如果在Package3,则只能看到Child1和Child2中公开的属性a.
总之:父类里面所有public和protected属性子类都能继承,但是只有当子类和父亲在同一个包中的时候才能继承默认级别属性。而且继承的时候不管这个属性或者方法是static的,或者是final的。当我们在通过子类访问子类从父类继承的特性时,相对于父类的位置。