因为是先调用父类的构造方法,也就是Human(),又在Human()中调用了子类的age方法,
而此时子类中的n并没有初始化,所以是0.

解决方案 »

  1.   

    多态,调用 子类的 age方法,而不是父类的age方法
      

  2.   

    而此时子类中的n并没有初始化???? 怎么理解 谁能给我做个test 
      

  3.   

    父类的构造方法执行完成后才会开始执行子类的构造方法.class Human {
    private int n = 10; public Human() {
    System.out.println("n = " + n);
    age(); // 调用子类的方法,这个像是 多态 的概念
    System.out.println("调用了");
    } public void age() {
    System.out.println("父类");
    }
    }public class Test1 extends Human {
    private int n = 20;
    public void age() {
    System.out.println("年龄是:" + n); // 年龄是:0
    System.out.println(this.getClass().getSuperclass());
    }

    public int getN(){
    return n;
    } public static void main(String[] args) {
    Test1 test = new Test1();// 创建子类实例
    System.out.println(test.getN()); //这样输出就是20了,因为此时已经执行完了Test1的构造方法了,而n也已经赋值成20了
    }
    }
      

  4.   

    楼主应该明白,new Test1()是实例一个Test1对象,因为Test1继承了Human,所以new她之前要先调用Human的构造函数的,而Test1里面的n是还没初始化的,就是那个n不管为多少,输出的都是0,楼主可以尝试不给n赋初始值看看
      

  5.   

    补充一下:当你new完那个Test1之后调用那个age()方法,得到的就会是20;实时new Test1().age();
      

  6.   

    public static void main(String[] args) {
    new Test1().age();// 创建子类实例
    /**
     * new Human();//创建父类实例
     */
    }输出的是:n = 10
    年龄是:0
    Human
    调用了
    年龄是:20
    Human
    搞定了 呼呼 不知道楼主理解了吗