在多態中成員函數的特點:
在編譯時期:參閱引用型變量所屬的類中是否有調用的方法。如果有,編譯通過,如果沒有,編譯失敗。
在運行時期:參閱對象所屬的類中是否有調用的方法。
簡單總結就是:成員函數在多態調用時,編譯看左邊,運行看右邊。
class Fu
{
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
}
class Zi extends Fu{
{
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
}
public class Duotai {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Fu f = new Zi();
f.method1();
f.method2();
f.method3();//此行編譯不能通過
}
}
Duotai.class運行後的結果是:zi method_1 //參閱 Zi 對象所屬的類中是否有調用的方法。
fu method_2//從父類繼承的方法。
在多態中成員變量的特點:
無論編譯和運行,都參考左邊(引用型變量所屬的類)。
在多態中靜態成員函數的特點:
無論編譯和運行,都參考左邊(引用型變量所屬的類)。
class Fu
{
int num = 10;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void methed4()
{
System.out.println("fu method_4");
}
}
class Zi extends Fu{
{
int num = 20;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
static void methed4()
{
System.out.println("zi method_4");
}
}
public class Duotai {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Fu f = new Zi();
System.out.println(f.num);
f.method4();
Zi z = new Zi();
System.out.println(z.num);
z.method4();
}
}
以上代碼的運行結果是:10 // 引用型變量 f 所屬的類是父類,所以結果是父類中的num = 10
fu method_4 // 引用型所述的類
20 // 引用型變量 z 所屬的類是子類,所以結果還是父類中的num = 20
zi method_4 // 引用型所述的類