本帖最后由 关静刚 于 2013-10-15 08:45 编辑
class A {
public void func1() {
System.out.println("A func1 is calling");
}
public void func2() {
func1();
}
}
class B extends A {
public void func1() {
System.out.println("B func1 is calling");
}
public void func3() {
System.out.println("B func3 is calling");
}
}
class C {
public static void main(String [] args) {
B b = new B();
A a = b;
callA(a);
callA(new B());
}
public static void callA(A a) {
a.func1();
a.func2();
}
}
打印出来的是四段:B func1 is calling
我的理解:A是父类,B是子类,b赋值给a,b自动提升为父类
callA(a);对方法callA调用了一次,所以打印一段,a是父类,为什么不打印:A func1 is calling呢?
callA(new B());对方法callA调用了一次,所以打印一段,b已经自动提升为父类:也应该打印A func1 is calling啊?
然后是执行类C中的a.func1();和a.func2();各打印一段,a作为父类,照理说也是打印A func1 is calling啊?
第一次发帖,新手一枚,初学JAVA,好多不懂,求指点,非常感谢 |