Вызов функции, помещенной в другую функцию другого класса - PullRequest
0 голосов
/ 21 февраля 2020

Я не мог gr asp мысль, почему коды ниже печатает консоль Person дважды. Я думал, что это должен был быть Человек и Студент. Когда getInfo () внутри printPerson () вызывается через объект «a», почему вызывается класс внутри класса 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());
    }
}

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Вы попытались переопределить метод private. Это невозможно. См. Переопределение «частного» метода в java для получения подробной информации. Поскольку Student не может видеть Person.getInfo Java, предполагается, что вы объявляете новый метод.

Если вы сделаете getInfo publi c, вы обнаружите, что вместо этого напечатано Student.

Это хороший аргумент для использования аннотации @Override перед любыми методами, которые вы собираетесь переопределить методом суперкласса. Это не просто документация - она ​​позволяет избежать мелких ошибок, позволяя вашей IDE предупреждать.

0 голосов
/ 21 февраля 2020

Я думаю, это потому, что Person.getInfo() является приватным , и вы не можете переопределить приватные методы, поэтому a.printPerson() будет фактически вызывать свои собственные getInfo(). Всегда комментируйте методы, которые вы хотите переопределить, с помощью @Override; компилятор выдаст ошибку, если в родительском классе теперь найден метод для переопределения.
Если вы хотите сделать Person.getInfo() закрытым для других классов, но все же хотите переопределить его, просто сделайте его protected.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...