【发布时间】:2015-02-25 04:40:58
【问题描述】:
多态性是具有多种形式的能力。方法覆盖是运行时多态性。
我的问题是:
Java 中有没有类似静态多态的东西?
可以将方法隐藏视为一种多态形式吗?
在这个question's answer中,据说静态方法不是多态的。这是什么原因?
【问题讨论】:
标签: java polymorphism overriding
多态性是具有多种形式的能力。方法覆盖是运行时多态性。
我的问题是:
Java 中有没有类似静态多态的东西?
可以将方法隐藏视为一种多态形式吗?
在这个question's answer中,据说静态方法不是多态的。这是什么原因?
【问题讨论】:
标签: java polymorphism overriding
如果我们运行这个测试
class A {
static void x() {
System.out.println("A");
}
}
class B extends A {
static void x() {
System.out.println("B");
}
}
class Test {
public static void main(String[] args) throws Exception {
A a = new B();
a.x();
}
}
它将打印 A。如果方法 x() 是多态的,它将打印 B。
【讨论】:
运行时的多态性采用“动态调度”的形式。也就是说,被调用的实际方法是根据您调用该方法的实际实例确定的。显然,这只适用于你有一个类的实例,所以严格来说,多态性不适用于隐藏静态方法。进一步解释差异check here。
【讨论】:
【讨论】:
多态性
Static Binding/Early binding/Compile time binding - Method overloading.(in same class) Dynamic binding/Runtime binding/Method overriding.(in different classes.)
java中的多态
它只有Method overloading和Method overriding两种类型,一旦method overriding变成Method Hiding,它就失去了它的多态特性。
请参阅stackoverflow中的以下问题。
1.) Question1
2.) Question2
【讨论】:
我相信方法隐藏在技术上会被认为是多态的。根据定义,隐藏方法具有与其基类中相同的签名或形式。这只是它的“多种形式”之一。将其视为重载......恰好“覆盖”了完全相同的签名。这将是静态多态性。
【讨论】: