Teacher继承Person类,在不同的包中,t可以调用name,但是为什么p不能调用name呢?
有人解释,p所属的类Person和Person类不是继承关系,所以不能访问我觉得解释的很勉强。
然后就有了下面的情况,变量 t 所属的类Teacher是Person的子类,t 应该也可以访问name字段,
这样验证了这个解释貌似是错的。
有没有哪位大神或者基础特别扎实的来解下惑。。
有人解释,p所属的类Person和Person类不是继承关系,所以不能访问我觉得解释的很勉强。
然后就有了下面的情况,变量 t 所属的类Teacher是Person的子类,t 应该也可以访问name字段,
这样验证了这个解释貌似是错的。
有没有哪位大神或者基础特别扎实的来解下惑。。
protected:除了可被类自身及与其在同一个包中的代码访问外,还可以在一个类中通过对象引用来访问,前提是这些对象引用至少应该具有与该成员所在的类相同的类型,也即是这些引用具有该成员所在类的类型或是其一子类型。这就是说包外的类访问父类的protected成员时,如果是通过创建对象引用来访问(直接用super不算),那么该引用只能是这个包外类的类型或是其子类型才行。所以在第一个程序里因为teacher类在包外,而且p是Person类型不是它所在类Teacher类的类型或其子类型,不能访问。在第二个程序里,在Student类里,有引用p为Person类型,t为Teacher类型,它们都不是Student类型或其子类型,所以不能访问。
你打得马赛克挡住了关键的部分,两个类没在同一个包下,protected修饰的允许同一包下的访问。
default:本包
其次,父类声明他的namei属性是protected,只有在同包或者子类不同包的情况下才可以调用到,显然Person 不可以继承自己,又在不同的包里,就没有能力看到name属性了
默认: 只有在同一个包里可见
Protected: 在同一个包里可见或者是在不同包里的子类可见
public: 在任何包里都可见