我刚刚开始使用java。只是为了确保我能够正确解释并理解术语。看起来子类型多态性将由两个组件组成,即多态对象和多态方法。
我的问题
所以Animal a = new Dog();
“a”是多态对象和方法覆盖多态方法吗?
答案 0 :(得分:2)
多态性是编程语言的一个特性,它允许例程使用不同类型的变量。如果某些代码可以同时使用某些不同类型,则它们是多态的。 越多态的代码就越好。
有两种类型的多态性 - 通用和 ad hoc :
toString()
方法适用于任何引用类型); f(int)
可以与int
,byte
,short
一起使用char
的)。有三种类型的 ad hoc 多态性:
double
的方法也可以接受任何7种原语); +
符号可能会重载); < / LI>
有两种通用多态类型 - 参数多态和子类型多态:
T
或E
字符,可以替换为任何类型) 所有静态方法都是非虚拟,所有非静态方法都是虚拟。
虚方法 - 是一个类的方法,可以在子类中重写,方法调用的具体方法实现将在 runtime 中定义。然后,开发人员无需知道使用虚方法处理对象的确切类型:足以知道该对象是类的类或子类的实例,其中声明了此方法。
虚方法是多态实现的重要方式。它们允许创建通用代码,它可以应用于基类以及任何子类的对象。同时,基类定义了与对象协调的方式,它的任何后代都可以通过这种方式具体实现。
使用继承也可以达到多态性,因为如果我们有父类和子类,并且我们有父类的代码,那么我们也可以将它与子类一起使用(例如接受{{的方法1}}可以接受任何其他类型)。
可以使用虚函数操作的对象称为多态对象。
方法覆盖不被视为多态。签名多态方法是一种可以使用各种呼叫签名和返回类型进行操作的方法。
这是多态性的一个很好的例子:
java.lang.Object
在您的示例中,Animal a = new Dog();
是类型为a
的{{1}}类型的引用。
编译器在右侧部分的基础上检查表达式的左侧部分和 JVM的工作。