我只是从Java开始。只是为了确保我可以正确解释并理解术语。看起来亚型多态将由两个部分组成,即多态对象和多态方法。
我的问题
那么Animal a = new Dog();
“ a”将是多态对象,而方法覆盖是多态方法吗?
最佳答案
多态是编程语言的一项功能,它允许例程使用不同类型的变量。如果某些代码可以同时使用某些不同的类型,则它是多态的。多态代码越多越好。
多态有两种类型-通用和临时:
在通用多态性下,一种类型可以使用其他无限类型(例如toString()
方法适用于任何引用类型);
在临时多态性下,其使用的类型数量是预先已知的(例如f(int)
可与int
,byte
,short
和char
一起使用)。
临时多态有三种类型:
扩展基元转换(例如,接受double
的方法也可以接受7种基元中的任何一种);
运算符重载(在Java中,用户没有运算符重载,在其他语言中,例如+
符号可以重载);
重载是一项功能,如果一个类的参数列表不同,则它允许一个类具有多个具有相同名称的方法。
共有两种通用多态类型-参数多态和子类型多态:
参数多态性(又名泛型)是一个类型不确定的类(T
或E
字符,可以用任何类型替换)。
子类型多态–是因为继承而拥有的(当我们从某个类继承时,在方法签名中可以编写超类并将其放在任何子类中)。没有虚拟方法,此子类型机制将无法工作。
所有静态方法都是非虚拟的,所有非静态方法都是虚拟的。
虚拟方法–是类的方法,可以在运行时中定义方法调用的具体方法实现的方式在子类中重写。这样,开发人员就不必知道使用虚拟方法使用该对象的确切类型:只需知道该对象是声明该方法的类的实例或类的子类就足够了。
虚拟方法是实现多态的非常重要的方法。它们允许创建通用代码,该通用代码可应用于基类以及其任何子类的对象。同时,基类定义了与对象协调的方式,它的任何后代都可以采用这种方式进行具体实现。
多态性也可以通过使用继承来实现,因为如果我们有父类和子类,并且有父类的代码,那么我们也可以将其与子类一起使用(例如,接受java.lang.Object
的方法可以接受任何其他类型)。
可以通过使用虚函数进行操作的对象称为多态对象。
方法覆盖不被视为多态性。签名多态方法是一种可以与多种呼叫签名和返回类型一起使用的方法。
这是多态的一个很好的例子:
Animal a = new Dog();
在您的示例中,
a
是类型Animal
对类型Dog
的对象的引用。编译器检查表达式的左侧部分,JVM在右侧部分的基础上工作。
关于java - 亚型多态性成分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39879235/