Java三大特性——繼承

繼承:

定義:子類繼承父類的屬性,使得子類對象具有與父類相同的屬性和行爲。子類可以直接訪問父類中的非私有的屬性和行爲。

好處:1.提高了代碼的複用性。2.使類與類之間產生了關係,是多態的前提。

 

1.繼承的格式:

通過exends 關鍵字,可以聲明一個子類繼承另一個父類。

定義格式如下:

 public class 父類{

}

public class  子類 extends 父類{

}

 

演示代碼如下:

/*
 * 定義員工類Employee,做爲父類
 */
class Employee {
    String name; // 定義name屬性
    // 定義員工的工作方法
    public void work() {
        System.out.println("盡心盡力地工作");
    }
}
​
/*
 * 定義講師類Teacher 繼承 員工類Employee
 */
class Teacher extends Employee {
    // 定義一個打印name的方法
    public void printName() {
        System.out.println("name=" + name);
    }
}
​
/*
 * 定義測試類
 */
public class ExtendDemo01 {
    public static void main(String[] args) {
        // 創建一個講師類對象
        Teacher t = new Teacher();
      
        // 爲該員工類的name屬性進行賦值
        t.name = "小明"; 
      
        // 調用該員工的printName()方法
        t.printName(); // name = 小明
        
        // 調用Teacher類繼承來的work()方法
        t.work();  // 盡心盡力地工作
    }
}

 

2.繼承後成員變量的特點

如果成員變量不重名,則這時的訪問不會出現任何影響。

如果子類與父類的成員變量重名了,這時訪問的是子類的成員變量。

這時就需要使用super關鍵字,修飾父類成員變量。        使用格式:super.父類成員變量名

演示代碼如下:

//父類

public class Fu {
		String s = "我是父類的成員變量";
}

//子類
public class Zi  extends Fu{
	String  s = "我是子類的成員變量";
		public void show() {
			System.out.println(super.s);
			System.out.println(s);
		}
}

//測試類
public class Test {

	public static void main(String[] args) {
		Zi zi = new Zi();
		zi.show();

	}

}

演示結果:
我是父類的成員變量
我是子類的成員變量

3.繼承後成員方法特點

如果子類父類出現不重名的成員方法,這時調用時沒有影響的。對象調用方法時,會先在子類中查找有沒有對應的方法,若子類中存在就會執行子類中的方法,若沒有則執行父類。

如果子類與父類中出現了重名的成員方法時,這時訪問怎會出現一種特殊的情況,叫做方法重寫。

方法重寫:子類中出現與父類一模一樣的方法時(返回值類型,方法名和參數列表都相同),會出現覆蓋效果,也稱爲重寫或複寫。聲明不變,重寫實現。

重寫的好處:在原有的父類的基礎上拓展出自己獨有的功能。

簡單的代碼示例:

//父類
public class Fu {
		public void show() {
			System.out.println("我是父類的成員方法");
		}
		
}

//子類

public class Zi  extends Fu{
	
		public void show() {
			super.show();
			System.out.println("我是子類的成員方法。");
			System.out.println("我可以比父類更健壯!");
		}
}

//測試類
public class Test {

	public static void main(String[] args) {
		Zi zi = new Zi();
		zi.show();
		
		}

}


演示結果:
我是父類的成員方法
我是子類的成員方法。
我可以比父類更健壯!

注:這裏重寫時,用到super.父類成員方法,表示調用父類的成員方法。

重寫的注意事項:

              1.子類方法覆蓋父類方法,必須保證權限不小於父類權限

               2.子類方法覆蓋父類方法,返回值類型,方法名和參數列表都要一模一樣。

4.繼承後構造方法的特點

1.構造方法名與類名是一致的,所以子類無法重寫子類構造方法。

2.構造方法的作用是初始化成員變量的,所以子類的初始化過程中必須先執行父類的初始化動作。子類的構造

方法中默認有一個super();表示調用父類的構造方法。

代碼如下:

//父類
public class Fu {
		
	public Fu() {
		System.out.println("父類構造方法");
	}
		
}

//子類
public class Zi  extends Fu{
	public Zi() {
        //super();默認調用父類構造方法
		System.out.println("子類的構造方法");
	}
		
}
//測試類
public class Test {

	public static void main(String[] args) {
		Zi zi = new Zi();
		
		
		}

}

演示結果:
父類構造方法
子類的構造方法

5.super和this

super:代表父類的引用

this:代表 當前對象的引用

super和this的用法:

1.訪問成員

        this.成員變量     ----     本類的

        super.成員變量  -----    父類的

        this.成員方法名()    ----  本類的

        super.成員方法名()   -----  父類的

2.訪問構造方法

this(...)  ---  本類的構造方法

super(...) --- 父類的構造方法

注:super()和this()都必須在構造方法的第一行,所以不能同時出現。

Java中只支持單繼承,不支持多繼承,但是支持多層繼承。

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