道阻且長(一) Java核心:5.面向對象(下)

       上一章節大致講解了,對象的一些基本特徵,最好能達到:看見任何一個東西,如果需要用代碼實現,我們馬上就能夠抽象成一個類。本章節將講解對象的典型特徵,在最初接觸的時候,我們可能會覺得非常模糊,這點沒事,隨着逐漸的學習,我們會一直使用到,也就慢慢的能夠加深理解。現在不理解,沒事,不耽誤接下來的學習!

1.封裝

(1)什麼是封裝?

封裝:指利用抽象數據類型將數據和基於數據的操作封裝在一起,使其構成一個不可分割的獨立實體,數據被保護在抽象數據類型的內部,儘可能地隱藏內部的細節,只保留一些對外接口使之與外部發生聯繫

簡而言之:上一章節的奶茶,將含糖量,含奶量這些統一封裝在奶茶類裏面,誰想使用奶茶的含糖量,只需要通過奶茶這個類獲取就行,不用關心內部實現。

(2)怎麼封裝?

public class MilkTea {  
      
    /* 
     * 對屬性的封裝 
     * 對奶茶的名稱、價格都是其私有屬性 
     */  
    private String name ;  
    private double price ;  
      
    /* 
     * setter()、getter()是該對象對外開發的接口 
     */  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getPrice() {  
        return price;  
    }  
  
    public void setPrice(double price) {  
        this.price = price;  
    }    
}  

(3)封裝有什麼用?

1、良好的封裝能夠減少耦合【即不用每次實現一個功能,都新建一個POJOjie'ou,Java很多時候都會解耦,就是每個模塊只做每個模塊的事情,分佈式的出現也是這樣】。

2、類內部的結構可以自由修改。

3、可以對成員進行更精確的控制。

4、隱藏信息,實現細節。

2.繼承

(1)什麼是繼承?

通過關鍵詞 extends 實現 ,A extends B時候,假如B能夠唱,跳,A繼承之後,立馬就能唱跳,再加上A自身能夠Rap,能夠:通過一個關鍵字,減少代碼量,同時A能夠靈活地拓展自己的功能

(2)怎麼繼承?

public class Person {  
    public void display(){  
        System.out.println("Play Person...");  
    }  
     static void display(Person person){  
       person.display();  
    }  
 }  


 public class Husband extends Person{  
    public static void main(String[] args) {  
         Husband husband = new Husband();  
         Person.display(husband);      //向上轉型  
    }  
 } 

(3)繼承有什麼用?

1、子類擁有父類非private的屬性和方法。

2、子類可以擁有自己屬性和方法,即子類可以對父類進行擴展

3、子類可以用自己的方式實現父類的方法。

3.多態

(1)什麼是多態?

最容易的理解:爸爸+媽媽(可以理解爲一個同樣的入口),生了兩個孩子,卻長得不一樣(出口不一樣)。

同一棵樹,所有的葉子都不一樣....這樣的例子很多,常見出現在代碼的:接口實現,繼承重寫兩個地方。

(2)怎麼多態?

   基於接口:

public interface A {  
	// 該接口定義了一個String返回類型的方法,輸入字符串str,基於內部不同的實現,最終返回一個String類型的數據
	String returnString(String str);
}  
  
public class B implements A{  

    @Override
    public String returnString(String str){  
        return "我是B," + str;  
    }   
}  

public class C implements A{  

	@Override
    public String returnString(String str){  
	// B,C返回了不同的數據,內部實現了不同的業務邏輯
	String s = "我是另一條業務邏輯";
        return "我是C," + s + str;  
    }   
}  

基於繼承: 

// A 本身打印:A and A
public class A {  
    public String show(A obj) {  
        return ("A and A");  
    }  
}  
// B 繼承 A,執行的show方法,打印輸出的是:B and A  
public class B extends A{  
    public String show(B obj){  
        return ("B and A");  
    }  
}  
// C 繼承 A,執行的show方法,打印輸出的是:C and A  
public class C extends A{  
  public String show(C obj){  
        return ("C and A");  
    } 
}  

(3)多態有什麼用?

提高代碼可拓展性,複用率

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