Topic: 为什么类中定义的属性直接赋值与在方法中赋值会有不同 |
Print this page |
1.为什么类中定义的属性直接赋值与在方法中赋值会有不同 | Copy to clipboard |
Posted by: jimmyofth Posted on: 2008-09-23 10:11 定义一个父类
定义一个子类
main方法
结果
为什么直接在main方法里取i,s的值,与在get方法里取值是不同的? 一个取自父类,一个取自子类 类的属性是存储在栈里还是堆里? |
2.Re:为什么类中定义的属性直接赋值与在方法中赋值会有不同 [Re: jimmyofth] | Copy to clipboard |
Posted by: JiafanZhou Posted on: 2008-09-25 16:37 > 为什么直接在main方法里取i,s的值,与在get方法里取值是不同的? > 一个取自父类,一个取自子类 Correct, this special rules applies to non-static fields declared in the class. i.e. - Fields that have the same as as any super-classes/interfaces will be overridden in the current derived class, and being used in the methods of the derived class. - Fields does not have the dynamic binding attributes, in other words, they are not polymorphic, any methods are polymorphic. - As a general rule, fields have the same as as super classes/interfaces should be avoided as not to cause confusion. - Your example clearly shows this feature. > 类的属性是存储在栈里还是堆里? depends if it is a primitive or a Java Object type. - for a primitive type, it will be stored in the stack. - for a Java Object type, it will be stored in the heap. - there are some violation to this general rule, depending on how JRE is implemented by Sun, for example, String has some special Literal Pool that does not strictly follow this rule in order to enhance the performance. Regards, Jiafan |
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 |