Java 调用放置在另一个类中的另一个函数中的函数
我不明白为什么下面的代码会打印两次。我想应该是个人和学生。当通过“a”对象调用printPerson()中的getInfo()时,为什么会调用Person类中的一个,为什么不会调用Student类中的一个?提前谢谢Java 调用放置在另一个类中的另一个函数中的函数,java,function,object,inheritance,polymorphism,Java,Function,Object,Inheritance,Polymorphism,我不明白为什么下面的代码会打印两次。我想应该是个人和学生。当通过“a”对象调用printPerson()中的getInfo()时,为什么会调用Person类中的一个,为什么不会调用Student类中的一个?提前谢谢 class deneme{ public static void main(String[] args) { Person b = new Person(); b.printPerson(); Student a = new
class deneme{
public static void main(String[] args) {
Person b = new Person();
b.printPerson();
Student a = new Student();
a.printPerson();
}
}
class Student extends Person {
public String getInfo() {
return "Student";
}
}
class Person{
private String getInfo() {
return "Person";
}
public void printPerson() {
System.out.println(getInfo());
}
}
您已尝试重写
private
方法。这是不可能的。有关详细信息,请参阅。因为Student
无法看到Person.getInfo
Java假定您正在声明一个新方法
如果将getInfo
公开,您将发现打印的是Student
这是一个很好的参数,用于在任何要覆盖超类方法的方法之前使用
@Override
注释。它不仅仅是文档,它还可以通过让IDE发出警告来避免细微的错误。您试图覆盖私有方法。这是不可能的。有关详细信息,请参阅。因为Student
无法看到Person.getInfo
Java假定您正在声明一个新方法
如果将getInfo
公开,您将发现打印的是Student
这是一个很好的参数,用于在任何要覆盖超类方法的方法之前使用@Override
注释。它不仅仅是文档,它可以通过让IDE发出警告来避免细微的错误。我认为这是因为Person.getInfo()
是私有的,您不能重写私有方法,所以a.printPerson()
实际上会调用它自己的getInfo()
。始终使用@override
注释要覆盖的方法;如果在父类中找到要重写的方法,编译器将抛出错误。
如果您想将Person.getInfo()
设为其他类的私有,但仍要覆盖它,只需将其设为受保护的,我认为这是因为Person.getInfo()
是私有的,您无法覆盖私有方法,因此a.printPerson()
实际上将调用它自己的getInfo()
。始终使用@override
注释要覆盖的方法;如果在父类中找到要重写的方法,编译器将抛出错误。
如果您想将Person.getInfo()
设为其他类的私有类,但仍要重写它,只需将其设为受保护的
,实际上我知道私有方法不能被重写,我声明了一个新方法。但我感到困惑的是,我正在通过学生类的对象调用main方法中的printPerson方法,即使我通过Student类对象调用了主方法中的printPerson方法,Student中的getInfo方法也没有被调用,这不是很奇怪吗?Person.printPerson
知道getInfo
是私有的,因此不可重写。因此,this
的实际类型在这一点上是不相关的-它必须调用本地私有getInfo
实际上我知道私有方法不能被重写,我声明了一个新方法。但我感到困惑的是,我正在通过学生类的对象调用main方法中的printPerson方法,即使我通过Student类对象调用了主方法中的printPerson方法,Student中的getInfo方法也没有被调用,这不是很奇怪吗?Person.printPerson
知道getInfo
是私有的,因此不可重写。因此,this
的实际类型在这一点上是不相关的-它必须调用本地私有getInfo