class Base {
int i;
Base() {add(1);}
void add(int v) {
i+= v;
}
void print() {System.out.println(i);}
}
class Extension extends Base {
Extension(){add(2);}
void add(int v) {
i+= v*2;
}
}
public class PolyTester {
public static void main(String args[]) {
bogo(new Extension());
}
static void bogo(Base b) {
b.add(8);
b.print();
}
}
//結果 22
大家幫忙分析一下 這里的結果為什么是22呢
我知道這里有子類覆蓋了父類的方法 那這里會不會調用父類的方法呢 好多不懂呢 幫忙分析一下啊
1.讀萬卷書
2.行千里路
3.閱人無數
int i;
Base() {add(1);}
void add(int v) {
i+= v;
}
void print() {System.out.println(i);}
}
class Extension extends Base {
Extension(){add(2);}
void add(int v)
{
System.out.println("i1= "+i);
System.out.println("v1="+v);
i+= v*2;
System.out.println("i2="+i);
System.out.println("v2= "+v);
}
/**覆蓋方法必須和被覆蓋方法具有相同的方法名稱、參數列表和返回值類型。當出現這樣的情況的時候 父類的方法將被覆蓋 即不再調用父類的方法 直接調用子類的方法*/
}
public class PolyTester {
public static void main(String args[]) {
bogo(new Extension());
}
static void bogo(Base b) {
b.add(8);
b.print();
}
}
運行結果 看不懂啊
D:\code>javac PolyTester.java
D:\code>java PolyTester
i1= 0
v1=1
i2=2
v2= 1
i1= 2
v1=2
i2=6
v2= 2
i1= 6
v1=8
i2=22
v2= 8
22
D:\code>javac PolyTester.java
D:\code>java PolyTester
i1= 0
v1=1
i2=2
v2= 1
i1= 2
v1=2
i2=6
v2= 2
i1= 6
v1=8
i2=22
v2= 8
22