作者superlubu (叔叔你人真好)
看板java
标题Re: [问题] 请问一下override的情况
时间Wed May 7 21:55:25 2008
的而且确是没有 override Animal.sizeType 的
compiler 在看到 SmallAnimal 再次 declare 一个叫 sizeType 的 variable 时
它只把它当成是一个独立,属於 SmallAnimal 的 variable
所以就算你把那一行换成 public int sizeType = 100; 都会没事
对 compiler 来说,sizeType 只是一个名称,是不会 override 掉 superclass 的
variable declaration.
你只要在 SmallAnimal.java 中如下加一句再跑一次看看便知了:
※ 引述《cheetim (所失者寡所得者众??)》之铭言:
: class SmallAnimal extends Animal{
: public String sizeType="small size";//变数二
: public double getSize(int weight){
: double amount=100.0;
: amount=amount*weight;
: System.out.println(sizeType+":"+amount);
System.out.println("**SUPERCLASS's sizeType variable: " + super.sizeType);
: return amount;
: }
: public double getSize(){
: System.out.println("small size");
: return 0.0;
: }
: }
: 在注解一的地方,跑程式的结果是small size:2000.0
: Animal class的getSize(int)会被overrided所以值是2000.0而不是400.0
: 但是变数不是不会被overrided吗?所以变数一的值因该不会变成变数二的值阿
而结果会是 small size:2000.0 的原因,是因为在 compile SmallAnimal.java 时
compiler 只把 getSize(int weight) 中的 sizeType reference 成 SmallAnimal
自己所 declare 的 sizeType variable,这情况就像是:
class TestA {
public
int haha = 0;
public void output(
int haha ) {
System.out.println(haha);
}
public static void main(String[] argv) {
TestA ta = new TestA();
ta.output(999);
}
}
执行这个 main 时就会 print out 999 而不是 0 一样。
: 结果为什麽不是no size:2000.0
: 希望版上高手可以帮我解说一下 谢谢搂
--
很多人以为 所以我要 其实我是个
我是
大学生 告诉大家 三十一岁的
怪叔叔
● ●/ ︿ ︿
/
劲\ <
劲 ●
ㄨ /\ ㄨ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.102.77.18
※ 编辑: superlubu 来自: 218.102.77.18 (05/07 21:55)
※ 编辑: superlubu 来自: 218.102.77.18 (05/07 21:57)
1F:推 cheetim:解释的很清楚 感谢 05/07 23:02