Java的繼承與介面
阿新 • • 發佈:2018-12-12
Java語言中的很重要的功能,繼承與介面。整合可以讓你在不同的類中共享程式碼,藉口可以用統一的方法處理幾個不同的類的物件。Android中用了大量的繼承,需要掌握。
面向物件的程式設計引入了繼承機制,大大提高了複用程式碼的能力。我們可以讓一個類在另一個類的基礎上進行擴充,還有助於讓程式建立在具有層次關係的物件型別上,使得程式在邏輯上清晰。
父類與子類
舉例說明:Employee的子類Secretary
public class Employee { public int gethour() { return 40; } public double getsalary() { return 4000.0; } public String getVacationForm() { return "Yellow"; } }
public class Secretary extends Employee {
public void takeDictation(String text)
{
System.out.println("Dictating text :"+text);
}
}
使用方法
public class Main { public static void main(String[] args) { Employee edna=new Employee(); System.out.println("他每週工作時間"+edna.gethour()); Secretary le=new Secretary(); System.out.println("她每週的工作時間"+le.gethour()); le.takeDictation("聽寫"); } }
重寫方法:
繼承得到的類,不可避免的部分需要對父類進行修改和替換。在子類中提供父類的某些方法的另一個實現版本,用來替換父類繼承而來的實現方法。這種替換父類的某些行為的特性稱之為重寫。
public class Lawyer extends Employee { public String getVacationForm(String text) { return "pink"; } public void use() { System.out.println("I am the king"); } }
public class LegalSecretary extends Secretary//繼承子類。
{
public double getSalary()
{
return 4411.0;
}
}
與父類進行互動
希望派生的類全面繼承父類的欄位,方法和建構函式。這種情況下,我們需要子類於父類進行更為複雜的互動過程,因此引入了一個新的關鍵字super。Java提供了super來表示父類。可以通過這個關鍵字呼叫父類的方法或建構函式。super只能呼叫上一層父類的內容,不存在super.super的情況。
例如
public class LegalSecretary extends Secretary {
public double getSalary()
{
return super.getSalary()+1001;
}
}
訪問繼承的欄位
子類不能訪問父類的私有欄位,需要父類提供相關的訪問器來進行訪問。
呼叫父類的建構函式
與父類中的其他方法不同,父類的建構函式不能被子類繼承。必須為子類編寫自己的建構函式,還可能會遇到不能訪問父類私有欄位而造成的問題。
問題1:子類雖然繼承了父類的各種欄位,但是他不能訪問那些私有的欄位。
問題2:繼承的機制要求子類的建構函式必須呼叫父類的建構函式。本質上說,子類的物件依然是父類的物件,因此必然也會呼叫父類的建構函式,但是子類物件不呼叫建構函式,那麼編譯器就去找父類的不帶引數的建構函式,但是父類不存在不帶引數的建構函式,那麼就會報錯。解決方法就是在子類的建構函式中顯式的呼叫父類的建構函式。super(***);