3
回答
父类构造访问子类重写的方法时,输出的成员变量是子类的还是父类的
科大讯飞通用文字识别100000次/天免费使用。立即申请   

相关代码如下

在main中new子类对象,此时从子类构造转到父类构造中,然后访问子类重写后的方法add().

此时输出的是父类的a还是子类的a,为什么输出是0,1?

public class FOO {


public static void main(String[] args) {
    Foo1 foo1=new Foo1();
}
int a=10;
  FOO(){
   add();
  }
   void add(){
   System.out.println(a);
   }

}
class Foo1 extends FOO{
    int a=11;
    Foo1(){

    }
     void add(){
         System.out.println(a);
         a++;
         System.out.println(a);
     }
}

举报
Qys_CZ
发帖于2年前 3回/506阅
共有3个答案 最后回答: 2年前
public class Foo {

    int a=10;

    Foo(){
        add();
    }   

    void add(){
        System.out.println("Foo " + a); 
    }   

    public static void main(String args[]) {
        Foo1 foo1=new Foo1();
    }   

}

class Foo1 extends Foo{

    int a = 20; 
    // int a;

    Foo1(){
        // super();
        // a = 20;
        System.out.println("Foo1 1 " + a); 
    }   

    void add(){
        System.out.println("Foo1 2 " + a); 
        System.out.println("Foo1 2 " + super.a);
        a++;
        System.out.println("Foo1 3 " + a); 
        System.out.println("Foo1 3 " + super.a);
        // super.add();
    }   

}

类成员变量的定义和初始化虽然可以写在一起, 但是实际的效果是, 定义在原处, 初始化是在默认构造函数中完成的. 同时, 类成员变量显式初始化之前, 系统会有一个默认的初始化 = 0.


顶部