1. 程式人生 > 實用技巧 >java 封裝多型繼承

java 封裝多型繼承

java 面向物件思想 封裝多型繼承

面向過程與面向物件

程式設計分為面向物件程式設計和麵向物件程式設計,彙編,C語言是面向過程寫程式碼,C++/Java是面向物件

其實面向過程和麵向物件在本質都是一樣寫程式碼,然後將程式碼翻譯成機器碼讓中央處理器去執行,但是在實現功能和整體設計上,相對於人來說,特別是Java,面向物件在設計上更抽象,是寫程式碼在設計上的昇華。

Java裡說,萬物皆物件,如果說java的面向物件設計思想是java火起來的原因,那麼Spring設計思想讓Java的光彩放大。

Java面向物件特性

萬物皆物件

在Java中,除了基礎資料型別,char int float 與數學計算相關的基本型別,其他所有的任何都是物件,他們會有對應的類名,位元組碼

封裝

java實際編寫功能時,所寫程式碼皆物件,因此封裝無處不在,你可以隱藏物件的屬性(private), 通過封裝方法對類裡面的內容操作。

封裝(Encapsulation)是面向物件方法的重要原則,就是把物件的屬性和操作(或服務)結合為一個獨立的整體,並儘可能隱藏物件的內部實現細節。

1將類的某些資訊隱藏在類的內部,不允許外部程式進行直接的訪問呼叫。

2通過該類提供的方法來實現對隱藏資訊的操作和訪問。

3隱藏物件的資訊。

4留出訪問的對外介面。

封裝的好處

  • 對成員變數實行更準確的控制。
  • 封裝可以隱藏內部程式實現的細節。
  • 良好的封裝能夠減少程式碼之間的耦合度。
  • 外部成員無法修改已封裝好的程式程式碼。
  • 方便資料檢查,有利於保護物件資訊的完整性,同時也提高程式的安全性。
  • 便於修改,體高程式碼的可維護性。

簡單一句話,高內聚,低耦合

繼承

繼承就是父子之間一種關係特性,如A類繼承B類,那麼A是子類,B是父類,通俗的理解,A(子類)繼承了B(父類)的一些公共屬性和方法。

簡單來說,繼承用在一些共性上,是設計上的抽象一種表現。

四肢動物是抽象的,但是你知道他有四肢,那麼你可以定義一個屬性,說明他是四肢動物,貓和狗可以繼承它,雞是兩條腿不能繼承它,這是從面向物件設計角度去描述繼承的使用

多型

多型是同一個行為具有多個不同表現形式或形態的能力。

多型的特點

1,消除型別之間的耦合關係,實現低耦合。

2,靈活性。

3,可擴充性。

4,可替換性。

你可以定義一種抽象類,並且建立抽象類的具體實現,之後所有子類物件建立可以用父類去接收,在執行方法時,父類引用指向子類物件,方法也是子類的方法,都是父類,指向不通子類,執行方法結果不一樣,就是多型。

封裝多型繼承 程式碼體現


/** -定義抽象類,動物
 * Animal-定義一個動物
 * @author Narule
 *
 */
public abstract class Animal {
	
	// 動物腿的數量
	protected int legNum;
	
	// 動物吃的食物
	protected String food;

	// 動物名字
	protected String name;

	// 是否是四肢動物 方法定義
	boolean isFourLegAnimal() {
		return legNum == 4;
	}	
	
	// 吃食物,抽象方法定義,具體動物需要實現次方法
	public String eatFood() {
		System.out.println(this.name);
		System.out.println("----------");
		System.out.println(this.name + " eat food is "  +  this.food);
		System.out.println("----------");
		return this.food;
	}
	
	
	
}

// 繼承動物
/*
 * Animal-雞
 */
class Chicken extends Animal{
	
	/* - 一種封裝手法,你可以建立一隻雞物件
	 * - 但是因為封裝了,你沒辦法修改雞的腿的條數,這一封裝好處的一個具體表現
	 */
	
	public Chicken() {
		this.legNum = 2;
		this.food = "insect 蟲子";
		this.name = "Chicken";
	}

}

/*
 * Animal-狗
 */
class Dog extends Animal{
	
	public Dog() {
		this.legNum = 4;
		this.food = "bone 骨頭";
		this.name = "Dog";
	}

}

/*
 * Animal-貓
 */
class Cat extends Animal{
	
	public Cat() {
		this.legNum = 4;
		this.food = "fish 魚";
		this.name = "Cat";
	}

	@Override
	public String eatFood() {
		System.out.println("override method define cat how to eat food");
		return super.eatFood();
	}

	
}

測試 封裝多型繼承特性

public class JavaFeatureTest {

	// java 封裝 繼承 多型  簡單理解表達
	public static void main(String[] args) {
		
		// 建立三個動物物件 雞 狗 貓
		// 封裝體現,建立物件不能去修改他的屬性
		Animal animal1 = new Chicken();
		Animal animal2 = new Dog();
		Animal animal3 = new Cat();
		
		// 判斷是否是四條腿的動物 繼承體現
		System.out.println(animal1.isFourLegAnimal());
		System.out.println(animal2.isFourLegAnimal());
		System.out.println(animal3.isFourLegAnimal());
		
		// 吃東西  多型體現,同一個行為j具有多個不通表現形式
		animal1.eatFood();
		animal2.eatFood();
		animal3.eatFood();
		
		// 多型 父類引用指向子類物件
		animal3 = new Chicken();
		animal3.eatFood();
		
	}
}

控制檯輸出

false
true
true
Chicken
----------
Chicken eat food is insect 蟲子
----------
Dog
----------
Dog eat food is bone 骨頭
----------
override method define cat how to eat food
Cat
----------
Cat eat food is fish 魚
----------
Chicken
----------
Chicken eat food is insect 蟲子
----------

Spring的淋漓精緻

很多時候,如果只是功能需求,我們甚至可以只寫一個介面,定義介面抽象方法的輸入和輸出,沒有具體實現,然後在開發的時候對應具體不同場景不同開發人員,可以容許不同的設計和實現。這樣軟體設計開發中很好的提高開發效率,並且以維護,易擴充套件,低耦合,安全。

多型,繼承,封裝高階使用,設計模式,Spring框架很多具體體現,(依賴抽象不依賴具體,控制反轉,代理),Spring是很值得學習的框架