Java 面向對象-繼承

在 Java 面向對象-內部私有屬性 中,我們定義了Person類:

package my.ioc;
 
public class PrivateField {
 
	public static void main(String[] args) {
		Person ming = new Person();
		ming.setName("Xiao Ming"); // 設置name
		ming.setAge(12); // 設置age
		System.out.println(ming.getName() + ", " + ming.getAge());
 
	}
 
}
 
class Person {
	public String name;
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public int age;
 
	public int getAge() {
		return age;
	}
 
	public void setAge(int age) {
		this.age = age;
	}
}

現在,假設需要定義一個Student類,字段如下: 

class Student {
    private String name;
    private int age;
    private int score;

    public String getName() {...}
    public void setName(String name) {...}
    public int getAge() {...}
    public void setAge(int age) {...}
    public int getScore() { … }
    public void setScore(int score) { … }
}

仔細觀察,發現Student類包含了Person類已有的字段和方法,只是多出了一個score字段和相應的getScore()setScore()方法。

能不能在Student中不要寫重複的代碼?

這個時候,繼承就派上用場了。

繼承是面向對象編程中非常強大的一種機制,它首先可以複用代碼。當我們讓StudentPerson繼承時,Student就獲得了Person的所有功能,我們只需要爲Student編寫新增的功能。

Java使用extends關鍵字來實現繼承:、

class Person {
    private String name;
    private int age;

    public String getName() {...}
    public void setName(String name) {...}
    public int getAge() {...}
    public void setAge(int age) {...}
}

class Student extends Person {
    // 不要重複name和age字段/方法,
    // 只需要定義新增score字段/方法:
    private int score;

    public int getScore() { … }
    public void setScore(int score) { … }
}

可見,通過繼承,Student只需要編寫額外的功能,不再需要重複代碼。

Java只允許一個class繼承自一個類,因此,一個類有且僅有一個父類。只有Object特殊,它沒有父類

繼承有個特點,就是子類無法訪問父類的private字段或者private方法。例如,Student類就無法訪問Person類的nameage字段 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章