Какой смысл использовать тип родительского класса и экземпляр дочернего класса в Java? - PullRequest
0 голосов
/ 11 июля 2019

Я изо всех сил пытаюсь получить эту точку. В Java я могу использовать тип класса Parent, используя оператор new с экземпляром класса Child. Допустим, у меня есть класс Parent Human и классы Male and Female Child. Я знаю, что они находятся в отношениях IS-A, потому что Мужчина - это Человек, а Женщина - это человек. Я знаю, что только методы, определенные в Human и переопределенные в Male / Female, могут использоваться с типом Human И экземпляром Male / Female. Но вопрос в том, почему я хотел бы использовать Human в качестве типа экземпляра Male / Female (child)?

Я пробовал пример класса "Типы", который создает объект типа "Человек". Чтобы метод Male-> humanType (или Female-> humanType) работал, мне пришлось объявить метод Human-> humanType, который ничего не делает. Единственное, о чем я мог подумать, это то, что, делая это, я могу передать параметр Human методу (сигнатура метода, т.е. Human h1), который является как мужским, так и женским, но для того, чтобы этот код работал, я должен объявляйте в классе Human ВСЕ методы, которые я объявляю в обоих классах Male / Female, которые в классе Human ничего не делают (аналогично абстрактным методам).

class Types {

  public static void main(String[] args) {

    Types t1 = new Types();
    Human p1 = new Male("Ugo");

    t1.getHumanType(p1);

  }


  public void getHumanType(Human human) {
    human.humanType();
  }

}

class Human {
  String name;

  Human(String name) {
    this.name = name;
  }

  public void humanType() { }
}

class Male extends Human {

  Male(String name) {
    super(name);
  }

  public void humanType() {
    System.out.println("Im a Male");
  }

}

class Female extends Human {

  Female(String name) {
    super(name);
  }

  public void humanType() {
    System.out.println("Im a Female");
  }

}

Это хороший способ бегать? Я просто хочу лучше понять такую ​​возможность, которую предлагает Java (я думаю, это называется поздним / ранним связыванием), потому что я не совсем понимаю ее. Разве абстрактный класс Human не был более правильным?

1 Ответ

2 голосов
/ 11 июля 2019

Слово, которое вы ищете, это «полиморфизм».

Вот ссылка на страницу учебника Oracle по полиморфизму .

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