定义类 A 和类 B 如下:

class A {
    int a = 1;
    double d = 2.0;
    void show() {
        System.out.println("Class A: a=" + a + "\td=" + d);
    }
}

class B extends A {
    float a = 3.0f;
    String d = "Java program.";
    void show() {
        super.show();
        System.out.println("Class B: a=" + a + "\td=" + d);
    }
}

(1) 若在应用程序的main方法中有以下语句:

A a=new A();
a.show();

则输出的结果如何?

(2) 若在应用程序的main方法中定义类B的对象b:

A b=new B();
b.show();

则输出的结果如何?

参考解答

输出结果为;
(1)

Class A: a=1    d=2.0

(2)

Class A: a=1    d=2.0  
Class B: a=3.0    d=Java program.

解析:

下面的例子列出了更一般的的执行顺序:

public class Main{
    public static void main(String[] args) {
        A b=new B();  // 1.  开始执行对象的创建
        b.show();     // 12. 开始调用对象的方法,根据多态特性调用B类中的show()的方法
    } // 20. 结束
}
class A {           // 4.  根据A的定义给新对象分配空间
    static int x=1; // 2.  加载类对象A,初始化A的静态变量
    int a = 1;      // 5.  初始化成员变量
    double d = 2.0; // 6.  初始化成员变量
    public A() {}   // 7.  调用父类A的构造
    void show() {   // 15. 执行该方法
        System.out.println("Class A: a=" + a + "\td=" + d); // 16. 打印
    } // 17. 返回
}

class B extends A {  // 8.  根据B的定义继续给新对象分配空间
    static int y=2;  // 3.  加载类对象B,初始化B的静态变量
    float a = 3.0f;  // 9.  初始化成员变量
    String d = "Java program.";  // 10. 初始化成员变量
    public B() {}    // 11.  调用子类B的构造
    void show() {    // 13. 执行该方法
        super.show();// 14. 执行父类的show()方法
        System.out.println("Class B: a=" + a + "\td=" + d); // 18. 打印
    } // 19. 返回
}

results matching ""

    No results matching ""