繼承、super與this的區別
阿新 • • 發佈:2018-11-02
繼承
說到繼承就想到了我們常說的子承父業,java中的繼承(extends)也就是運用了這種思想,這樣可以減少程式碼的重複率以及方便維護。super與this的區別
super | this |
---|---|
父類物件的引用 | 本類物件的引用 |
super.成員變數(或成員方法) 呼叫父類成員變數(或成員方法) |
this.成員變數(或成員方法) 呼叫本類成員變數(或成員方法) |
super(...) 呼叫父類構造方法 |
this(...) 呼叫本類構造方法 |
final、private關鍵字
final | private |
---|---|
被修飾的類不能被繼承 | 被修飾的方法不能被繼承 |
被修飾的方法不能被繼承 | |
被修飾的變數賦值完後,不能被重新賦值 | 被修飾的變數不能被繼承 |
程式碼演示
父類public class Extend{ public Extend() { System.out.println("我是父類構造方法"); } public void show(){ System.out.println("我是父類show方法"); } final int i=100; String x="我是父類常量"; private String p="我是父類私有變數"; private void my(){ System.out.println("我是父類私有方法"); } }
子類
public class Extend2 extends Extend{
public Extend2() {
// super();系統隱藏的,你也可以寫出來,這就是為什麼父類建構函式會先執行的原因
System.out.println("我是子類構造方法");
}
@Override
public void show() {
System.out.println("我是子類重寫的show方法");
}
}
測試類
public class Text { public static void main(String[] args) { Extend2 e=new Extend2();//建立Extend物件e System.out.println(e.x); System.out.println(e.i); // System.out.println(e.p);這句話會出錯 e.show(); // e.my();這句話會出錯 } }
結果
我是父類構造方法
我是子類構造方法
我是父類常量
100
我是子類重寫的show方法
通過結果可以看出例項化子類時,回會先對父類建構函式進行例項化,其次是子類建構函式,重寫過後的函式,結果也會是重寫的內容,常量也被繼承下來了,但是私有方法變數卻不能被呼叫。