1. 程式人生 > >Java的繼承與介面

Java的繼承與介面

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(***);

Object類