关于类之间的继承—请高手指点

来源:百度知道 编辑:UC知道 时间:2024/09/20 17:19:06
abstract class A{
abstract void a1();
void a2(){System.out.println("print a.a2");}
}
class B extends A{
void a1(){System.out.println("print b.a1");};
void a2(){System.out.println("print b.a2");};
}
class C extends B{
void c1(){System.out.println("print c.c1");}
}
public class TestJava {
public static void main(String[] args) {
A x = new B();
B y = new C();
A z = new C();
x.a2();
z.a2();
z.a1();
x.a1();
//z.c1();
//y.c1();
}
}
输出:
print b.a2
print b.a2
print b.a1
print b.a1

1、为什么注释不分不让调用?
2、还有输出如何解释?
3、具体是怎么个调用过程?

因为你的z声明为A类型,而不是C类型,虽然你创建的是C类型
而A类型里面没有c1方法,所以就不能调用了
同理y.c1()也不能调用

输出是这样的,如果父类的方法没有被子类重写,那么输出结果是父类的,否则就是子类的。
具体的输出结果是依赖于你new出来的具体类型,但是你不能调用声明的父类类型之外的方法