什么';在Java中使用父类的类型和子类的实例有什么意义?
我正努力想弄明白这一点。在Java中,我可以使用新操作符和子类实例来使用父类类型。 比如说,我有人类家长班和男女儿童班。 我知道他们之间是一种关系,因为男性是人,女性是人。 我知道只有在Human中定义并在Male/Female中重写的方法才能用于Human类型和Male/Female实例。 但问题是:为什么我要使用Human作为男性/女性(儿童)实例的类型 我尝试了一个示例“Types”类,它创建了一个人类类型的男性对象。为了使Male->humanType(或Female->humanType)方法能够工作,我必须声明一个不做任何事情的Human->humanType方法。 我所能想到的唯一一件事是,通过这样做,我能够将一个人工参数传递给一个方法(方法签名,即Human h1),该方法是男性或女性的,但为了使该代码正常工作,我必须在Human类中声明我在男性/女性类中声明的所有方法,而在Human类中什么都不做(类似于抽象方法) 这是跑步的好方法吗?什么';在Java中使用父类的类型和子类的实例有什么意义?,java,Java,我正努力想弄明白这一点。在Java中,我可以使用新操作符和子类实例来使用父类类型。 比如说,我有人类家长班和男女儿童班。 我知道他们之间是一种关系,因为男性是人,女性是人。 我知道只有在Human中定义并在Male/Female中重写的方法才能用于Human类型和Male/Female实例。 但问题是:为什么我要使用Human作为男性/女性(儿童)实例的类型 我尝试了一个示例“Types”类,它创建了一个人类类型的男性对象。为了使Male->humanType(或Female->humanTyp
我只是想更好地理解Java提供的这种可能性(我认为它被称为后期/早期绑定),因为我没有完全理解它。抽象类Human不是更正确吗?您要寻找的词是“多态性”
这里有一个指向的链接。
getHumanType
不会编译,因为Object
没有定义humanType()
。我想你的意思是接受人类
作为一个参数。现在,假设你为汽车
编写了一个类,并希望它接受人。你不想在设计汽车时指定汽车中允许的每种类型的人——围绕人类
类型建造汽车,汽车将能够接受所有人类,联邦应急管理局le或male。@VinceEmigh:你说得对:方法签名是getHumanType(Human-Human)
。我刚刚粘贴了一个错误的签名。问题仍然是一样的。看看这个:你应该总是编程到一个接口,而不是实现。你的接口(im Java:接口或抽象类)定义您编程所依据的契约。实现应该是隐藏的,以便您可以将其更改为接口的另一个实现。本教程对我已经知道的理论没有任何补充,我在上一篇文章中发表了自己的观点。我确实理解多态性是什么,但我不明白为什么要编写Animal a1=new Dog或Human h1=新男性,而不是使用子类型。问题是为什么,而不是如何。@saga语句,如Human h=new Male()
据我所知,没有任何用处。当实际变量在其他地方定义时,如方法参数或字段成员,此功能非常有用。如果我们有字段或方法参数列表
,我们可以随时更改使用的值。如果您被告知为汽车
编写类,但没有被告知类型是什么实体的集合将在汽车中,您将定义一个类型CarEntity
,并围绕该类型构建您的类。然后其他实体将从该类型派生。您可以编写car
,而无需知道汽车中到底会发生什么。
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");
}
}