子类继承父类的成员变量是同一个变量吗?

hailun 2007-10-15 04:45:45
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吗?
...全文
1594 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
七七仔17 2011-10-15
  • 打赏
  • 举报
回复
没错,我也测试了。。是同一个。
如果子类中又有了定义,则不是一个了。我也测试过了。
luyang1016 2007-11-01
  • 打赏
  • 举报
回复
应该是同一个
胡矣 2007-11-01
  • 打赏
  • 举报
回复
这样的是同一个..
ftgreat 2007-11-01
  • 打赏
  • 举报
回复
mark
光明山人 2007-11-01
  • 打赏
  • 举报
回复
私有(private)变量也被继承下来了(在它的肚子里面),只是不能访问。
animeng 2007-10-22
  • 打赏
  • 举报
回复
只要此成员变量不被子类覆盖,子类和父类的对象引用指向同一个内存单元.
bbaiyun 2007-10-22
  • 打赏
  • 举报
回复
建议楼主也看一下thinking in Java 3rd,
一定要搞清楚,继承的原则,重写,重载.
对你理解这个问题很有帮助.
bbaiyun 2007-10-22
  • 打赏
  • 举报
回复 1
答复:elukuangben的问个问题啊
如果class Father {
int x;
} 中x为私有变量会是怎么?
也就是:
class Father {
private int x;
}

注意:在继承中,私有成员变量是不会被继承下来的,建议你看一下Think in Java这本书.
网络咖啡 2007-10-22
  • 打赏
  • 举报
回复
同一个
elukuangben 2007-10-22
  • 打赏
  • 举报
回复
问个问题啊
如果class Father {
int x;
} 中x为私有变量会是怎么?
也就是:
class Father {
private int x;
}
moonRise2007 2007-10-21
  • 打赏
  • 举报
回复
继承,子类和父类是共享同一变量。抛开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有两个。
rorey_008 2007-10-21
  • 打赏
  • 举报
回复
是同一个,父类和子类共享同一个域
如下面的例子:
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
光明山人 2007-10-20
  • 打赏
  • 举报
回复
当子类从父类继承的时候,父类拥有的子类就拥有。子类只是要扩大或明确自己的功能。
DGCDHT 2007-10-20
  • 打赏
  • 举报
回复
是同一个
B b=new B();
在堆栈在分配一小块区域  存放对象的引用b 它指向堆中为这个对象分配的一大块内存  而在这块内存中有一块存储的是父类中的成员变量
conanhhy 2007-10-16
  • 打赏
  • 举报
回复
是同一个,父类和子类共享同一个域
如下面的例子:
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...
这样明白了吧
hailun 2007-10-16
  • 打赏
  • 举报
回复
那在内在里要怎么理解这个a呢,同一个,不是同一个,相信大家都知道是继承,但具体是不是一个呢?怎么理解的呢
langzi606 2007-10-15
  • 打赏
  • 举报
回复
同一个?改变B.a的时候同时改变了A.a?当a不是static时候
javahelper 2007-10-15
  • 打赏
  • 举报
回复
1楼确定?
conanhhy 2007-10-15
  • 打赏
  • 举报
回复
不是传,只是子类和父类使用的是同一个域a而已
光明山人 2007-10-15
  • 打赏
  • 举报
回复
同一个,不需要传。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧