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 刚才自己运行了一下,发现结果和我分析的正好相反 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.**()"来调用其父类的方法,否则子类 的实例是无法调用其父类的原方法的。(此处所说的 方法不包括静态方法,这又是另一种情形了) 实例变量的隐藏要通过子类的对象访问父类的该实例 变量,就要通过上溯造型来获取,如
这跟上述问题的例子实际上是一样的。 |
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: 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: 沒有就申請一個吧! arno wrote: 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 |