public class Test {
public static void main(String args[]){
Student s = new Student();
s.printPerson();
}
}
class Person{
private String getInfo(){
return "Person";
}
public void printPerson(){
System.out.println(getInfo());
}
}
class Student extends Person{
private String getInfo(){
return "Student";
}
}
输出为
Person
。我对这个结果很困惑。在main方法中,引用类型是Student
。所以执行s.printPerson()
时,应该执行Student
的方法。关键是,在从超类继承的公共方法中,调用了哪个私有方法?为什么?
我认为在
s.printPerson()
中,它调用了getInfo()
的Student
。但事实证明并非如此。 IDE 告诉我
private String getInfo(){
return "Student";
}
从未使用过。
有人可以帮我吗?
private
方法不是继承的。
子类不会继承其父类的
成员。 但是,如果超类具有用于访问其私有字段的公共或受保护方法,则子类也可以使用这些方法。private
您无法通过创建另一个
getInfo
方法来覆盖 getInfo
,因为它不是继承的。 这就是为什么你的 IDE 会给你“从未使用过”警告,因为 Student
中没有任何内容使用它。 调用来自 getInfo
的 Person
,因为它可用于 Person
的 printPerson
方法,因此打印 Person
。
要重写方法,它不能是
private
。 您可以将 getInfo
设为包私有(无访问修饰符)、protected
或 public
。 然后 Student
将能够覆盖它。
您使用
private
修饰符。此修饰符意味着该方法仅在类本身中可见,而在其他类中不可见,甚至在其子类和超类中也不可见。因此,当您从类 getInfo()
调用 Person
时,唯一可见的方法是在 Person
类中定义的方法。实际上,这意味着 Java 中的私有方法不会被继承。
尝试将
private
修饰符更改为 protected
。然后子类可以看到超类的方法,因此它们可以覆盖该方法。
承认知识或与博隆纳一起培根......~•Homeschooler @QuickFin772m.me 这个DropOut角色装傻就够了。我厌倦了验证您的身份机制故障...ChanceyWishbone 收藏家Reservedcets 206M