多态的另一种定义

时间:2012-03-16 14:07:16

标签: java oop polymorphism override

我写信给你,以确保我真正理解多态性的定义。 所以,如果我写:

SuperClass sc=new SubClass();

是否喜欢说“我喜欢类SuperClass的对象,但我希望它的行为类似于覆盖方法的子类对象”? 谢谢你的回复。

7 个答案:

答案 0 :(得分:3)

我不完全像那样解释它。我会说:“我想要一个SubClass对象,但它应该被视为一个SuperClass,这样它与哪个子类完全无关。”

也就是说,假设您有SubClass1和SubClass2同时实现方法计算,您希望能够为所有这些方法调用方法而不确切知道它们是哪个类,您只需将它们全部视为SuperClass。 / p>

希望这有帮助。

答案 1 :(得分:2)

我认为,通过具体而言,更容易理解。考虑:

Pet myPet = new Dog();

Pet myPet = new Cat();

有什么区别?如果你对宠物的了解是Pet,那么你不知道如果你打电话会发生什么:

myPet.beHappy();

在第一种情况下,beHappy()可能会被实现为this.wagTail();,而在第二种情况下,它可能是this.purr();

现在回到你的初步描述并替换特定的类:“我喜欢宠物,但我希望它表现得像狗[或猫]快乐”。是否这是对你所发生的事情的准确描述,我认为,取决于你的观点。当然,事实上,您确实有一个Pet对象,其行为类似于Dog(或Cat)对象。另一方面,有人可能会说:“我想要一只狗,但我想和其他任何宠物一样与它进行互动。”这也是一个有效的描述发生了什么事。

哪个是正确的描述?他们俩都是。哪个更好?它只取决于你从哪个方面开始。

答案 2 :(得分:1)

我认为你的理解是正确的。

  

多态的字典定义是指一个原则   生物体或物种可以有许多不同形式的生物学   或阶段。这个原则也可以应用于面向对象   编程和Java语言之类的语言。 a的子类   class可以定义自己独特的行为并分享一些   父类的相同功能。

来自http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

答案 3 :(得分:0)

我喜欢使用Shapes的想法。 “所有三角形都是形状,但并非所有形状都是三角形。”所有三角形的行为都像形状,但并非所有形状都像三角形一样。

例如,所有形状都有一个区域,但这不是以相同的方式计算的。圆圈(子类或超类形状)使用公式phi * r * r,但这不适用于所有形状(即并非所有形状都是圆形)。

答案 4 :(得分:0)

不,这不正确。这样您就可以创建SubClass的对象,但是您不能引用特定于SubClass的方法,而只能引用类SuperClass的方法,因为scSuperClass类型。如果您覆盖SubClass中的某些方法,则会执行实际的SubClass代码,而不管您的对象是否被声明为SuperClass

主要区别在于编译时类型和运行时类型。在这种情况下,sc在编译时是SuperClass类型,但在运行时它是SubClass(当然,如果你不覆盖{SubClass中的方法1}}如果被调用,将执行SuperClass的相应方法。

答案 5 :(得分:0)

您的陈述:“我想要类SuperClass的对象,但我希望它的行为类似于覆盖方法的子类对象”是正确的,它是Sub-type polymorphism

您还可以拥有实现接口的多态性。一个常见的例子是toString()方法,其中每个类都有类似的行为(打印为String)

请参阅维基百科的Polymorphism in OOP了解另一个例子。

答案 6 :(得分:0)

您正在尝试将子类引用引入超类变量并修改行为,以便对超类的任何调用都将调用子类方法。多态性可以通过重载或覆盖来实现。希望以下这些示例链接能够澄清更多内容。

Example One

Second example