Java 构造器 一道构造器调用子类重载方法的题目

构造器中不能new本类对象,否则进入死循环。

构造器没有返回值,也没有void修饰。

使用关键字super可以调用父类的构造器,而且这一句必须放在第一句的位置,否则无法编译。

 

题目:

请写出以下程序的输出。

/**
 * 构造器题目
 * Created by Heyiyong on 2014-4-6 上午12:09.
 */
public class ConstructorTest extends  BB{
    public static void main(String[] args) {
        new ConstructorTest(5);
    }
    private int a = 1;

    public void func() {
        System.out.println("Test.func a = " + a);
    }

    public ConstructorTest(int a) {
        this.a = a;
        System.out.println("ConstructorTest");
    }
}

class BB {
    private int a = 10;
    public void func() {
        System.out.println("BB.func a = " + a);
    }
    public BB() {
        System.out.println("BB 构造器");
        func();
    }
}

输出结果是:

BB 构造器
Test.func a = 0
ConstructorTest

  原因是Test类构造一个对象,首先调用的是父类BB的构造器,构造器调用了func方法,这个方法在子类有重载,因此调用的是子类的func方法,此时子类的成员变量a还没有初始化,因此a的值为0。

  此外,如果BB类中方法func为private,那么调用的func方法为BB类中的func方法,输出的a值为10。

posted @ 2013-12-04 08:48  无忧之路  阅读(251)  评论(0编辑  收藏  举报
无忧之路