Использование метода getClass суперкласса из объекта Subclass - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть три класса.Главное, Животное (Суперкласс) и Кошка (Подкласс).Когда я попытался вызвать метод whatIsTheClass (), я не понял вывод «Cat».Я ожидал увидеть выход «Животное».Причина, по которой я ожидал вывод «Animal», заключается в том, что я считаю, что метод whatIsTheClass () вызывается из объекта Animal, а не объекта Cat, поскольку подкласс не содержит этот метод.

Основной класс:

package com.example.java;

public class Main {

 public static void main(String[] args) {
     Animal cat = new Cat();
 }

}

Класс Cat:

package com.example.java;

public class Cat extends Animal {

 public Cat() {
     super();
     whatIsTheClass();
 }

}

Класс Animal:

package com.example.java;

public class Animal {

 public void whatIsTheClass() {
     System.out.println(this.getClass().getSimpleName());
 }

}

Насколько я понимаю, в наследовании Подкласс не копирует методы из Суперкласса.Если вызываемый метод не определен в объекте Subclass, он будет искать вызываемый метод в объекте Superclass.И если вызываемый метод определен в объекте Superclass, он будет вызван оттуда.В этом случае, поскольку подкласс не определяет свой собственный метод whatIsTheClass (), он должен был использовать метод whatIsTheClass (), определенный в объекте Superclass.Но если whatIsTheClass () был вызван из объекта Superclass, почему он возвращает имя подкласса, а не имя суперкласса?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Метод whatIsTheClass может быть определен в Animal, но в каком коде класса вызывается getClass(), не имеет значения.Это все о типе времени выполнения объекта, как указано в Javadocs для getClass():

Возвращает класс времени выполнения этого Object.

Тип времени выполнения объекта, указанного cat, равен Cat.

По этой же причине ни один класс не должен переопределять getClass() только для того, чтобы возвратить соответствующий Class объект.(Метод getClass() равен final в любом случае.)

0 голосов
/ 26 сентября 2018

Когда создается объект класса Cat, копия всех методов и полей суперкласса получает память в этом объекте.Вот почему, используя объект подкласса, вы также можете получить доступ к членам суперкласса.Обратите внимание, что во время наследования создается только объект подкласса, а не суперкласс.

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