我正在努力做到这一点。在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提供的这种可能性(我认为它称为“后期/早期绑定”),因为我没有完全掌握它。人类抽象类不是更正确吗?