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是很值得學習的框架