目錄
- 1. 封裝性
- 1.1 含義
- 1.2 實作
- 1.3 優點
- 1.4 缺點
- 2. 繼承
- 2.1 含義
- 2.2 特點
- 2.3 優點
- 2.4 缺點
- 3. 多型
- 3.1 含義
- 3.2 實作
- 3.2.1 操作名稱的多型實體(方法多載)
- 3.2.2 和繼承有關的多型實體(方法重寫)
- 3.3 優點
- 3.4 缺點
- 4. 參考
1. 封裝性
1.1 含義
面向物件編程的核心思想之一就是將資料和對資料的操作封裝在一起,個人理解為將類的屬性和方法封裝起來,資訊隱藏化,僅對外開放介面,控制程式中屬性的訪問級別,即用戶無需知道內部的資料和方法的具體實作細節,只需根據留在外部的介面進行操作
1.2 實作
修改屬性的訪問控制符(修改為 private);創建 getter / setter 方法(用于屬性的讀寫);在 getter / setter 方法中加入屬性控制陳述句(用于判斷屬性值的合法性);
public class Rect {
/*對矩形屬性寬、高及方法求面積的封裝*/
private double width;
private double height;
/*public double getWidth(){
return width;
}
public void setWidth(){
this.width = width;
}*/
// setter()、getter()介面可替換為Rect中的引數介面
Rect(double width,double height){
this.width=width;
this.height=height;
}
public double getArea() {
return width*height;
}
}
1.3 優點
-
便于使用,簡化編程(如實體中只需提供寬和高即可得到面積,無需知道如何求得面積)
-
提高重用性(供其他方法呼叫)
-
提高安全性(對外部隱藏實作細節)
1.4 缺點
- 變數不能直接被訪問,增加了訪問步驟,
2. 繼承
2.1 含義
子類可以繼承父類的屬性和行為,即繼承父類所具有的資料和資料上的操作,例如,“人類”自然繼承了 “哺乳類” 的屬性和行為,
2.2 特點
子類比父類強大,例如“人類”相較于“哺乳類”,又增添了人類獨有的屬性和行為;Java 是單繼承,一個子類只有一個父類,但可以繼承多層子類(不建議繼承超過 3 層);子類對父類的成員變數無法直接操作,只能通過父類繼承的 setter 和 getter 方法,
2.3 優點
減少代碼量,提高復用率;實作多型的前提;增強一致性來減少模塊間的介面和界面,增加了程式的易維護性,
2.4 缺點
類與類之間存在 “強耦合” 關系,即當一個類存在多個子類時,若父類發生變化,子類會一同變化,
3. 多型
3.1 含義
一種多型是操作名稱的多型,即多個操作具有相同的名字(方法多載),但這些操作所接收的訊息型別(引數)必須不同,例如讓一個人(同一個物件)執行 “求面積” 操作時,多型可以向操作傳遞不同訊息,如求 “矩形面積” 或 “梯形面積”(矩形傳遞寬高,梯形傳遞上下底和高),以便讓物件根據相應的訊息來產生相應的行為,
另一種多型是和繼承有關的多型,是指同一個操作被不同型別物件呼叫時可能產生不同的行為(子類重寫父類中的方法),例如,狗和貓都具有哺乳類的行為 “喊叫”,但是,狗操作 “喊叫” 產生的聲音是 “汪汪…”,而貓操作“喊叫”產生的聲音是 “喵喵…”,
3.2 實作
3.2.1 操作名稱的多型實體(方法多載)
方法名相同 + 引數個數或型別不同
class A{
double f(int x,double y){
return x+y;
}
int f(int x,int y){
return x*y;
}
}
public class E{
public static void main(String args[]){
A a = new A();
System.out.println(a.f(10,10));//輸出100
System.out.println(a.f(10,10.0));//輸出20.0
}
}
3.2.2 和繼承有關的多型實體(方法重寫)
繼承 + 方法重寫 + 父類的參考指向子類物件
//創建父類
public class Animal{
public void shout(){
System.out.println("喊叫");
}
}
//創建子類并重寫方法
public class Dog extends Animal{
public void shout(){
System.out.println("wangwang...");
}
}
public class Cat extends Animal{
public void shout(){
System.out.println("miaomiao...");
}
}
//測驗
public class AnimalTest{
public static void main (String[] args){
//父類的參考指向子類物件
Animal d = new Dog();
animalShout(d);//輸出wangwang...
//父類的參考指向子類物件
Animal c = new Cat();//輸出miaomiao...
animalShout(c);
}
public static void animalShout(Animal animal){
animal.shout();
}
}
3.3 優點
- 可替換(可替代一存在的代碼)
- 可擴充(增加的子類不影響已存在的類的運行和操作)
- 靈活性,提高使用效率;
- 簡化性(處理大量物件的運算和操作時,方便撰寫和修改)
3.4 缺點
- 只能使用父類的參考訪問父類的成員
4. 參考
-
Java 類的三大特性總結
-
Java 面向物件的三大特征以及理解
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/276287.html
標籤:其他
