Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用放置在另一个类中的另一个函数中的函数_Java_Function_Object_Inheritance_Polymorphism - Fatal编程技术网

Java 调用放置在另一个类中的另一个函数中的函数

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

我不明白为什么下面的代码会打印两次。我想应该是个人和学生。当通过“a”对象调用printPerson()中的getInfo()时,为什么会调用Person类中的一个,为什么不会调用Student类中的一个?提前谢谢

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