Java 多态性指的是方法还是对象?

Java 多态性指的是方法还是对象?,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,所以我是Java的初学者,在读一本书的时候,我有一个关于多态性的问题。多态性似乎有两种不同的含义:一种是继承层次结构的多态性(如类型兼容性),另一种是选择正确的方法在运行时调用,因为不同的继承级别可能有不同的重写方法。当谈论多态性时,人们指的是哪一个?或者这是两者的总称 类型兼容性的一个示例如下 Animal a = new Mammal(); 或 多态行为适用于对象而非方法我们确实将这两者都称为多态。因为,术语“poly”意味着“多”,而“Morpheus”则意味着存在。这只是意味着,任何可

所以我是Java的初学者,在读一本书的时候,我有一个关于多态性的问题。多态性似乎有两种不同的含义:一种是继承层次结构的多态性(如类型兼容性),另一种是选择正确的方法在运行时调用,因为不同的继承级别可能有不同的重写方法。当谈论多态性时,人们指的是哪一个?或者这是两者的总称

类型兼容性的一个示例如下

Animal a = new Mammal();


多态行为适用于对象而非方法

我们确实将这两者都称为多态。因为,术语“poly”意味着“多”,而“Morpheus”则意味着存在。这只是意味着,任何可以以多种形式存在的事物都倾向于具有多态性

另一个是选择在运行时调用的正确方法,如 不同的继承级别可能有不同的重写方法

起初,我们只将方法调用称为多态性。但是由于Java的发展,我们有了新的东西,其中之一就是

ArrayList<Animal> animalList = new ArrayList<Animal>();
animalList.add(0, new Mammal());
animalList.add(1, new Vertebrate()); 
ArrayList animalList=new ArrayList();
添加(0,新哺乳动物());
添加(1,新脊椎动物());
这就解释了你的

一个是继承层次结构的多态性(比如类型 兼容性)

后者在性质上也是多态的。[这有一定的局限性,因为您是初学者,所以可以深入研究。参考资料:头先Java]


问题的答案是“多态性是对象而不是方法”。方法与多态性无关。对象内部有方法。[假设,仅供您理解]。在运行时,JVM决定调用哪个。请把我告诉你的那本书通读一遍。肯定会对您有所帮助。

我不确定我是否理解这里的区别-您能提供一个例子吗?这些例子都是相同的,或者更确切地说,第一个是第二个的子集。在这两种情况下,您都是通过超类引用来引用子类保险。这不是Java中的演变。人们总是能够将子类实例传递给接受超类引用的方法。@OliverCharlesworth,我指的是集合的东西,所有这些都不能按我们的意愿使用。已经有了泛型。这只能在阵列中实现。如果涉及ArrayList,则取决于我们如何定义泛型。
Student s = null;
Student g = new Graduate();
Student u = new UnderGrad();
... (after reading user input, call a method based on what the user chooses)
if(inputstr.equals("g"))
     s = g;
else if(inputstr.equals("u"))
     s = u;
else
     s = new Student();
s.displayGrade(); //this method is different based on if they are undergrad, grad, or student
ArrayList<Animal> animalList = new ArrayList<Animal>();
animalList.add(0, new Mammal());
animalList.add(1, new Vertebrate());