繁体   English   中英

Java调用子类和超类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM