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