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