我想知道为什么第三个输出不是b.
这是我的代码:
public class SimpleTests {
public void func(A a) {
System.out.println("Hi A");
}
public void func(B b) {
System.out.println("Hi B");
}
public static void main(String[] args) {
A a = new A();
B b = new B();
A c = new B();
SimpleTests i = new SimpleTests();
i.func(a);
i.func(b);
i.func(c);
}
}
class A {}
class B extends A {}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Hi A
Hi B
Hi A
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么第三个输出是Hi A,不是Hi B.因为真实的c是B的一个实例.
SBy*_*ans 16
你在使用多态进行重载时感到困惑.
使用多态,在创建类B的实例时,它是类A的子类,由类A对象引用,并覆盖类A的方法,调用该方法将执行类B的方法.
使用重载时,被调用的方法只知道参数声明的类型,而不是初始化.
public class A {
public void print() {
System.out.println("A");
}
}
public class B extends A {
@Override
public void print() {
System.out.println("B");
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
B b = new B();
A otherB = new B();
a.print();
b.print();
otherB.print();
}
}
Run Code Online (Sandbox Code Playgroud)
这将输出
A
B
B
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |