Topic: 这个a到底是多少?(成员变量在继承时的覆盖问题)

  Print this page

1.这个a到底是多少?(成员变量在继承时的覆盖问题) Copy to clipboard
Posted by: 铁针
Posted on: 2003-05-09 11:49

class SuperClass{
int a;
public SuperClass(){a=12;}
void test(){System.out.println("this is the super!");}
}

class SubClass extends SuperClass{
int a;
public SubClass(){a=13;}
void test(){System.out.println("This is the subclass");}
}

class Test{
public static void main(String args[]){
SuperClass temp = new SubClass();
System.out.println(temp.a);}
}

2.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: yakuu
Posted on: 2003-05-09 13:18

The class declaration is SuperClass, the instance is SubClass.

temp.a is point to SuperClass's var.

trace the code you can find the answer.

3.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: 铁针
Posted on: 2003-05-09 14:52

弄不明白啊!老大,你就直接讲一下啊?

4.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: hoppocket
Posted on: 2003-05-09 19:57

temp 编译时声明为父类,但运行时刻指向子类(子类的特殊部分被隐藏);
子类被实例化的时候,首先通过调用父类构造函数继承了父类的变量a,

然后调用自己的构造函数,导致覆盖了父类变量a,从而temp.a=13

can help?

5.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: hoppocket
Posted on: 2003-05-09 20:06

纠正一下,

子类被实例的时候,父类首先被实例化,然后子类从父类那里继承了成员变量a,接下来被子类自己的构造函数覆盖

6.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: hoppocket
Posted on: 2003-05-09 22:52

Black Eye
刚才自己运行了一下,发现结果和我分析的正好相反 temp.a = 12

郁闷中。。。

看来temp is a SuperClass' var, so when this(this =new SubClass() )

is assigned to temp, the upcasting automatically occur,

即temp=(SuperClass)this

but when "temp.abstractmethod()", what will happen?

i am confusing....

7.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: mochow
Posted on: 2003-05-09 23:25

看看java pitfalls这本书的item6吧,里面有专门讲这个的。

说是变量的类型分为class variables, instance variables,
method parameters, constructor parameters,
exception-handler parameters, and local variables
与这个例子有关的就是instance variables即实例变量,
它与类变量class variables的共同点,都是类的变量,
只不过class variables指的是interface的变量或者是类的
静态变量。

子类定义了一个与父类同名的实例变量,但是其值不
同,相当于隐藏了父类同名的变量。这与方法的隐藏
不同。方法的如果被子类覆盖了,则子类只能在其类
内部通过"super.**()"来调用其父类的方法,否则子类
的实例是无法调用其父类的原方法的。(此处所说的
方法不包括静态方法,这又是另一种情形了)
实例变量的隐藏要通过子类的对象访问父类的该实例
变量,就要通过上溯造型来获取,如

SubrClass temp1 = new SubClass();
SuperClass temp2 = (SuperClass)temp1;
System.out.println("The SuperClass's instance variable a's
value is = " + temp2.a);


这跟上述问题的例子实际上是一样的。

8.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: 铁针
Posted on: 2003-05-09 23:35

谢谢各位指教!

9.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: hoppocket
Posted on: 2003-05-10 11:03

mochow

可不可以告诉我哪有下你说的“java pitfalls"

这本书?给个详细的书单吧:)

10.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: hoppocket] Copy to clipboard
Posted by: Jove
Posted on: 2003-05-10 15:29

hoppocket wrote:
mochow

可不可以告诉我哪有下你说的“java pitfalls"

这本书?给个详细的书单吧:)


check this url http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8572

11.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: mochow
Posted on: 2003-05-10 17:58

http://groups.yahoo.com/group/mo_chow/files/

我看了一下那个第一章,总体上来说翻译的还不错,
但是还是觉得看英文的更容易懂些。

12.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: hoppocket
Posted on: 2003-05-11 23:02

我没有yahoo的账号

可不可以发到我得信箱呢?多谢了:)

email :bu_peng@hotmail.com

13.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: hoppocket
Posted on: 2003-05-12 00:30

mo_chow

你在哪个group?

14.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: mochow
Posted on: 2003-05-12 12:24

已经发给你了

15.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: arno
Posted on: 2003-05-12 13:38

放到ftp上吧

16.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: hoppocket] Copy to clipboard
Posted by: why
Posted on: 2003-05-12 13:43

hoppocket wrote:
我没有yahoo的账号

沒有就申請一個吧!Smile

arno wrote:
放到ftp上吧

FTP2上好像已有Java Pitfalls.

17.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: arno
Posted on: 2003-05-12 13:56

谁有这本书的中/英b版吗,麻烦给我发一个 arno@vip.sina.com

18.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: arno
Posted on: 2003-05-12 14:07

我没有看到,可以给我具体的路径吗

19.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: why] Copy to clipboard
Posted by: liufancjsdn
Posted on: 2003-05-12 14:09

不用想得那么复杂,就这样:
Super有一个a, Sub也有一个a ; 各自的Constructor设置各自的a ;
最后输出时,因为没有override,所以不是动态联编,
temp被声明为什么类型,那就输出那个类型的a
就这样

20.Re:这个a到底是多少?(成员变量在继承时的覆盖问题) [Re: 铁针] Copy to clipboard
Posted by: qilong2000
Posted on: 2003-05-13 17:07

还是liuifancjsdn说出了本质


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923