作者pluseus (回忆真美丽)
看板java
标题[问题] 一个简单的变数继承问题
时间Fri Apr 12 16:52:00 2013
大家好,不好意思,我想请问一下一个简单的变数继承问题
我想要做一个测试确认
就是父类别原本有的类别变数,假如是var1
子类别继承後,子类别的物件obj内,应该有var1、super.var1两块独立的变数吧?
但是为什麽我做了以下测试
我发现我改了obj内的super.var1,obj内的var也会一起改变?
难道是var1、super.var1其实是同一个变数吗?
万分感谢!
source code:
import java.lang.*;
public class class_130412
{
public static void main(String args[])
{
CB obj = new CB();
obj.show();
}
}
class CA
{
public int var1;
public CA()
{
System.out.println("父类别建构子建构中");
var1=10;
}
}
class CB extends CA // 子类别CB继承自类别CA
{
public CB()
{
System.out.println("子类别建构子建构中");
var1=20;
super.var1=30;
}
public void show()
{
System.out.println("var1=" + var1);
System.out.println("super.var1=" + super.var1);
}
}
结果:
父类别建构子建构中
子类别建构子建构中
var1=30
super.var1=30
问题1:
为什麽super.var1=30
会一起动到var1的数值?
问题2:
如果我把super.var1=30注解掉
结果是
父类别建构子建构中
子类别建构子建构中
var1=20
super.var1=20
super.var1不应该是要维持同样是10吗?
谢谢指点!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.113.229
※ 编辑: pluseus 来自: 140.109.113.229 (04/12 16:58)
1F:推 LPH66:你讲的只有当你在 CB 里"也"宣告 int var1; 才成立 04/12 16:57
2F:→ LPH66:而这个时候父类别的那个 var1 就只能经由 super.var1 存取 04/12 17:00
3F:→ LPH66:如果没有的话 在 CB 里用 var1 用的就是父类别的那个变数 04/12 17:01
4F:→ pluseus:嗯嗯 好像的确是 我在CB也宣告int var1 就成功分开来了 04/12 17:05
5F:→ pluseus:所以在我的例子中var1和super.var1其实是同一个变数吧? 04/12 17:06
6F:→ pluseus:谢谢一楼 ^^ 04/12 17:07
7F:→ swpoker:要先弄清楚物件生成的流程喔~这样你在设计会比较清楚 04/12 17:19