?? coverhidetest.java
字號:
package book.oo.coverhide;
public class CoverHideTest {
public static void main(String[] args) {
// 類變量是指變量屬于類,通過類名就可以訪問類變量
// 實例變量是指變量屬于類的實例即對象,通過對象可以訪問實例變量,但是通過類名不可以訪問實例變量
// 同樣靜態方法屬于一個類,通過類名就可以訪問靜態方法,而實例方法屬于對象,通過對象訪問實例方法
// 所謂隱藏是指,子類能隱藏父類的變量和方法,通過子類對象,不能訪問父類被隱藏了的變量和方法,
// 但是將子類對象轉換成父類對象時,可以訪問父類中被隱藏的變量和方法
// 而覆蓋則指,子類能覆蓋父類的方法,通過子類對象,不能訪問父類被覆蓋了的方法,
// 將子類轉換成父類對象時,也不能訪問父類中被隱藏的方法。
// 方法可以被隱藏和覆蓋,但是變量只可能被隱藏,不會被覆蓋
// 先測試繼承時變量的覆蓋與隱藏問題
Child child = new Child();
System.out.println("child name: " + child.name + "; age: " + child.age
+ "; kind: " + child.kind);// 此時得到的都是Child類的變量值
// 將child類型轉換成Parent對象,
Parent parent = child;
System.out.println("轉換成Parent后name: " + parent.name + "; age: "
+ parent.age + "; kind: " + parent.kind);// 此時得到的都是Parent類的變量值
/**
* 結論:父類的實例變量和類變量能被子類的同名變量隱藏。將子類對象轉換成父類對象后,可以訪問父類的實例變量和類變量
* 在子類中若需要訪問父類中被隱藏的實例變量,需要使用super關鍵字。
* 在子類中若需要訪問父類中被隱藏的類變量,需要使用父類的名字加"."來訪問
*/
System.out.println();
System.out.println("子類訪問父類被隱藏的實例變量 name:" + child.getParentName());
System.out.println("子類訪問父類被隱藏的靜態變量 kind:" + Child.getParentKind());
// 再測試繼承時方法的覆蓋與隱藏問題
System.out.println();
child.getName();// 實例方法
child.getKind();// 靜態方法
parent.getName();// 實例方法
parent.getKind();// 靜態方法
/**
* 結論:父類的靜態方法被子類的同名靜態方法隱藏;而父類的實例方法被子類的同名實例方法覆蓋!
* 將子類對象轉換成父類對象后,可以訪問父類的靜態方法,但是不能夠訪問父類的實例方法。
*
* 試圖用子類的靜態方法隱藏父類中同樣標識的實例方法是不合法的,編譯器將會報錯
* 試圖用子類的實例方法覆蓋父類中同樣標識的靜態方法也是不合法的,編譯器會報錯
* 靜態方法和最終方法(帶關鍵字final的方法)不能被覆蓋
*
*/
}
// child name: Child; age: 25; kind: book.oo.coverhide.Child
// 轉換成Parent后name: Parent; age: 50; kind: book.oo.coverhide.Parent
//
// 子類訪問父類中被隱藏的實例變量 name:Parent
// 子類訪問父類中被隱藏的靜態變量 kind:book.oo.coverhide.Parent
//
// Child的getName()方法被調用了!
// Child的getKind()方法被調用了!
// Child的getName()方法被調用了!
// Parent的getKind()方法被調用了!
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -