在Java中使用父类的类型和子类的实例有什么意义?

时间:2019-07-11 15:43:22

标签: java

我正在努力做到这一点。在Java中,可以将new运算符与Child类实例一起使用Parent类类型。 假设我有父母人类班和男女儿童班。 我知道他们处于IS-A关系中,因为男性是-人类,女性是-人类。 我知道,只有在“人类”中定义且在“男性/女性”中被覆盖的方法才能与“人类”类型和“男性/女性”实例一起使用。 但是问题是:为什么我要使用Human作为Male / Female(孩子)实例的类型?

我尝试了一个示例“ Types”类,该类创建了Human类型Male对象。为了使Male-> humanType(或Female-> humanType)方法起作用,我必须声明一个不执行任何操作的Human-> humanType方法。 我唯一能想到的是,通过这样做,我能够将Human参数传递给既可以是Male或Female的方法(方法签名,即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提供的这种可能性(我认为它称为“后期/早期绑定”),因为我没有完全掌握它。人类抽象类不是更正确吗?

1 个答案:

答案 0 :(得分:2)

您要查找的词是“多态性”。

这里是指向Oracle Polymorphism Tutorial Page的链接。