[英]Java invoke subclass and superclass
public class prelim {
public static void main(String[] args) {
A a = new A();
System.out.println(a.x);
System.out.println(a.m());
B b = new B();
System.out.println(b.x);
System.out.println(b.m());
a = new B();
System.out.println(a.x);
System.out.println(a.m());
b = (B)a;
System.out.println(b.x);
System.out.println(b.m());
}
}
class A {
int x;
A() {
this(1);
}
A(int x) {
this.x = x;
}
int m() {
return x;
}
}
class B extends A {
int x;
B() {
this(2);
}
B(int x) {
super(x+1);
this.x = super.x + 1;
}
int m() {
return x;
}
}
至于 a = new B(); b = (B)a; a 和 b 的类型是什么,因为它没有被声明。 并且输出是 3 4 4 4。我认为 a 是类型 B。所以 ax 和 am() 应该是 4 4。
我不确切知道调用子类及其方法的过程。
变量“a”的类型为 A,这就是它声明的类型。 变量的类型永远不会改变。 Java 中的变量是引用。 类型 A 的变量可以指向类型 A 的对象或其子类之一(或null )。
同样,变量“b”的类型为 B。它只能指向类型为 B 或null的对象,因为 B 没有子类。
正确的打印输出(为简洁起见删除换行符)是:
1 1 4 4 3 4 4 4
四种打印输出的对象类型是
A B B B
在第三个打印输出中,ax 访问 A 类的“x”变量,该变量存在,即使对象具有类 B。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.