class A{
  public int a = 0;
  void pa(){
    System.out.println("a");
  }
}
class B extends A{
  
}B继承A,那么B继承A里的a与父类的a是同一个变量吗
既然是继承下来,那么A里a的值应该是隐式传给B里的a吗?

解决方案 »

  1.   

    同一个?改变B.a的时候同时改变了A.a?当a不是static时候
      

  2.   

    是同一个,父类和子类共享同一个域
    如下面的例子:
    class Father {
    int x;
    }class Children extends Father {
    void cal() {
    ++x;
    System.out.println("x of class Father: " + super.x);
    System.out.println("x of children: " + x);
    }
    }public class test {
    public static void main(String[] args) {
    new Children().cal();
    }
    }
    输出:
    x of class Father: 1
    x of children: 1
    Press any key to continue...
    这样明白了吧
      

  3.   

    是同一个
    B  b=new B();
    在堆栈在分配一小块区域  存放对象的引用b 它指向堆中为这个对象分配的一大块内存  而在这块内存中有一块存储的是父类中的成员变量
      

  4.   

    是同一个,父类和子类共享同一个域 
    如下面的例子: 
    class Father { 
    int x; 
    } class Children extends Father { 
    void cal() { 
    ++x; 
    System.out.println("x of class Father: " + super.x); 
    System.out.println("x of children: " + x); 

    } public class test { 
    public static void main(String[] args) { 
    new Children().cal(); 


    输出: 
    x of class Father: 1 
    x of children: 1 
      

  5.   

    继承,子类和父类是共享同一变量。抛开Java的内存组织不谈,单从实际运行的角度来讲,JVM也不会维护两份拷贝。试想,假设子类和父类各自拥有自己变量的引用,会出现什么情况?如果父类在某个方法中对a的值做了改变,那么,由于子类是继承的父类的a,它要保持自己的a和父类的a的一致性,于是父类的a在发生改变的时候,势必会引起对子类的a的同步。子类发生改变的时候,也会引起父类的同步。这显然是不合理的,Java的设计师们不会做这种无畏的牺牲。所以,对继承,子类和父类对同一变量总是使用同一个引用。如下的程序段:
    class A
    {
    public int a = 0;
    void pa()
    {
    System.out.println(a);
    }
    }class B extends A
    {
    void pa()
    {
    System.out.println(a);
                    a++;
    super.pa();
    }
    }
    如果用"new B().pa()"调用来查看运行结果,会打印出0和1.就是说,子类变化,父类也跟着变化了。如果是继承并覆写,则是另一种情况:
    class C extends A
    {
    public int a;
    void pa()
    {
    System.out.println(a);
                    a++;
    super.pa();
    }
    }
    C继承了A的变量a,但是覆写了它。这时候,A的a和C的a就不一样了。使用“new C().pa()”调用来查看运行结果,会打印出两个0.如果你对上面的分析还有怀疑,我们还可以找到一个有力的证据:用Eclipse或者Jbuilder的dbug来分析一下。它们能够跟踪到程序运行的内存使用情况。你会发现,纯粹的继承,B对象中只有一个a;但是带覆写的继承中,该对象维护的变量a有两个。
      

  6.   

    问个问题啊
    如果class Father {  
    int x;  
    } 中x为私有变量会是怎么?
    也就是:
    class Father {  
    private int x;  

      

  7.   

    答复:elukuangben的问个问题啊 
    如果class Father {   
    int x;   
    } 中x为私有变量会是怎么? 
    也就是: 
    class Father {   
    private int x;   
    }  注意:在继承中,私有成员变量是不会被继承下来的,建议你看一下Think in Java这本书.
      

  8.   

    建议楼主也看一下thinking in Java 3rd,
    一定要搞清楚,继承的原则,重写,重载.
    对你理解这个问题很有帮助.
      

  9.   

    私有(private)变量也被继承下来了(在它的肚子里面),只是不能访问。