我的问题是:
>
为什么方法隐藏也是编译时多态性的一个例子,而它没有被覆盖?相关代码:
class A{
public static void print(){
System.out.println("class A");
}
}
public class B extends A{
public static void print(){
System.out.println("class B");
}
public static void main(String[] args){
A a = new B();
a.print(); //class A
B b = new B();
b.print(); //class B
}
}
如果方法隐藏也是编译时多态性的一个例子,那么为什么变量隐藏不是编译时多态性的一个例子,而像方法隐藏这样的变量隐藏没有被覆盖和多态?
对不起,我的英语很差。
https://byjus.com/gate/difference-between-compile-time-and-run-time-polymorphism-in-java
问:什么是编译时多态性?
A: 编译时多态性是通过方法重载获得的。术语方法重载允许我们有多个同名的方法。由于这个过程是在编译时执行的,所以它被称为编译时多态性。
您的代码不会按原样编译。下面是一个替代版本:
乙.java:
class A{
public static void print(){
System.out.println("class A");
}
}
public class B extends A{
public static void print(){
System.out.println("class B");
}
public static void main(String[] args){
A a = new A();
a.print();
B b = new B();
b.print();
A c = new B();
c.print();
//System.out.println(a.a);
}
}
输出:
class A
class B
class A
你会注意到:
现在让我们尝试一个不同的例子,没有“静态”:
class A2{
public void print(){
System.out.println("class A2");
}
}
public class B2 extends A2{
public void print(){
System.out.println("class B2");
}
public static void main(String[] args){
A2 a = new A2();
a.print();
B2 b = new B2();
b.print();
A2 c = new B2();
c.print();
//System.out.println(a.a);
}
}
输出:
class A2
class B2
class B2
这是运行时多态性的一个例子。