[quote=引用 6 楼 soton_dolphin的回复:]首先,你不需要用p.name 来获取父类的p 的值,因为子类的p就是父类的p。 其次,父类声明他的namei属性是protected,只有在同包或者子类不同包的情况下才可以调用到,显然Person 不可以继承自己,又在不同的包里,就没有能力看到name属性了
首先,你不需要用p.name 来获取父类的p 的值,因为子类的p就是父类的p。 其次,父类声明他的namei属性是protected,只有在同包或者子类不同包的情况下才可以调用到,显然Person 不可以继承自己,又在不同的包里,就没有能力看到name属性了
这个问题在《java程序设计语言》中有专门的一节讨论protected的准确含义。 protected:除了可被类自身及与其在同一个包中的代码访问外,还可以在一个类中通过对象引用来访问,前提是这些对象引用至少应该具有与该成员所在的类相同的类型,也即是这些引用具有该成员所在类的类型或是其一子类型。 这就是说包外的类访问父类的protected成员时,如果是通过创建对象引用来访问(直接用super不算),那么该引用只能是这个包外类的类型或是其子类型才行。 所以在第一个程序里因为teacher类在包外,而且p是Person类型不是它所在类Teacher类的类型或其子类型,不能访问。 在第二个程序里,在Student类里,有引用p为Person类型,t为Teacher类型,它们都不是Student类型或其子类型,所以不能访问。
62,614
社区成员
307,326
社区内容
加载中
试试用AI创作助手写篇文章吧