日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java中类与类的关系_Java中类与类的关系

發布時間:2023/12/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中类与类的关系_Java中类与类的关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在java中類和類的關系大致分三種:泛化、關聯、依賴。

1. 泛化(Generalization)

"XX是一個XX"關系(is a),通常使用的關鍵詞為 extends、implements

繼承:繼承是面向對象最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,并能擴展新的能力。

繼承的特點:

1.繼承關系是傳遞的。若類C繼承類B,類B繼承類A(多層繼承),則類C既有從類B那里繼承下來的屬性與方法,也有從類A那里繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隱式的,但仍是類C的屬性和方法。繼承是在一些比較一般的類的基礎上構造、建立和擴充新類的最有效的手段。

2.繼承簡化了人們對事物的認識和描述,能清晰體現相關類間的層次結構關系。

3.繼承提供了軟件復用功能。若類B繼承類A,那么建立類B時只需要再描述與基類(類A)不同的少量特征(數據成員和成員方法)即可。這種做法能減小代碼和數據的冗余度,大大增加程序的重用性。

4.繼承通過增強一致性來減少模塊間的接口和界面,大大增加了程序的易維護性。

5.提供多重繼承機制。從理論上說,一個類可以是多個一般類的特殊類,它可以從多個一般類中繼承屬性與方法,這便是多重繼承。Java出于安全性和可靠性的考慮僅支持單重繼承,而通過使用接口機制來實現多重繼承。

注意:如果父類是接口那么其中所有的方法必須由子類重寫。如果父類是抽象類那么父類中的未實現方法必須有子類重寫,

一般父類

//父類

public class Car {

public void drive() {

System.out.println("車可以開");

}

}

//子類

public class Bus extends Car {

public void buyTickets(){

System.out.println("公交車要買票");

}

}

公交車拓展了車的功能增加了一個買票的功能

抽象父類

public abstract class Animal {

public void eat() {

System.out.println("動物可以吃東西");

}

public abstract void move();

}

public class Dog extends Animal {

@Override

public void move() {

System.out.println("狗在地上跑");

}

}

有部分未實現的方法必須在子類中實現。

接口父類

public interface Phone {

void call();

void sendMsg();

}

public class SmartPhone implements Phone {

@Override

public void call() {

System.out.println("手機可以打電話");

}

@Override

public void sendMsg() {

System.out.println("手機可以發短信");

}

}

所有方法都在子類實現

2.關聯(Association)

"XX是XX的一部分"關系(has a)通常使用的關鍵字 new

當一個對象中,加入了另外一個對象時就形成關聯關系。

關于分為有兩種特殊的形式,聚合(Aggregation)和組合(Composition),聚合和組合只有概念上的區別,在Java中的代碼實現上沒有區別。

在代碼中具體表現為成員變量。

1.組合

組合:表示類之間的整體和部分的關系,所有組合在一起的對象作為一個整體存在,當整體不存在了那么部分對象也就不存在了

組合就像是人體,一旦人死亡每個器官就都死亡了。

2.聚合

聚合:表示整體和部分的關系,所有聚合在一起的對象作為一個整體存在,但個體的生命周期并不依賴整體的生命周期。

聚合就像人群,即使一個個體走散了個體也能生存。

下面我們就舉個例子來說明兩者關系:

有如下場景,汽車要開動之前需要先清潔汽車,檢修完成后使用發動機點火啟動。

/**

* 汽車清理工具

*/

public class CleaningTools {

private static final CleaningTools cleaningTools = new CleaningTools();

private CleaningTools() {}

public static CleaningTools getCleaningTools() {

return cleaningTools;

}

public void clean() {

System.out.println("清潔汽車");

}

}

/**

* 汽車發動機

*/

public class Motor {

public void startUp() {

System.out.println("發動汽車");

}

}

public class Car {

private CleaningTools cleaningTools = CleaningTools.getCleaningTools();

private Motor motor = new Motor();

public void dirver() {

cleaningTools.clean();

motor.startUp();

}

public static void main(String[] args) {

Car car = new Car();

car.dirver();

}

}

在這個例子中汽車發動機和汽車就是組合關系。當汽車報廢后發動機也會報廢。(強關聯)

汽車和汽車清理工具的關系是,即便汽車報廢清理工具也能清理其他汽車。(弱關聯)

3. 依賴(Dependency)

"XX用了一個XX"關系(use a)關鍵字 import

代碼中的表現為局部變量,方法的參數,以及對靜態方法的調用

1.依賴

依賴: 指兩個相對獨立的類,一個類負責構造另外一個類時兩個類就形成了依賴關系。

依賴關系是最普遍的關系

public class StringUtil {

public static boolean isNotEmpty(String str) {

return str != null && "".equals(str.trim());

}

}

public class Customer {

public static void main(String[] args) {

StringUtil.isNotEmpty("111");

}

}

我們調用了StringUtil中的isNotEmpty方法,那么我們就可以說Customer類依賴了StringUtil類

4.總結

應該盡量優先使用關聯,而不是泛化,因為泛化會使得類關系過于復雜化,破壞了封裝性,使用組合一樣可以獲得已有類的功能,而且會使新類更加穩固。

實際上,從依賴 ? 關聯 ? 泛化,類與類之間的關系更加緊密,互相之間的影響越來越大。

1.泛化

優點

子類能自動繼承父類的接口

創建子類的對象時,無須創建父類的對象

缺點

破壞封裝,子類與父類之間緊密耦合,子類依賴于父類的實現,子類缺乏獨立性

支持擴展,但是往往以增加系統結構的復雜度為代價

不支持動態繼承。在運行時,子類無法選擇不同的父類

子類不能改變父類的接口

2.關聯

優點

不破壞封裝,整體類與局部類之間松耦合,彼此相對獨立

具有較好的可擴展性

支持動態組合。在運行時,整體對象可以選擇不同類型的局部對象

整體類可以對局部類進行包裝,封裝局部類的接口,提供新的接口

缺點

整體類不能自動獲得和局部類同樣的接口

創建整體類的對象時,需要創建所有局部類的對象

3.使用泛化還是關聯。

新類是否需要向上造型。也就是說當我們想重用原類型作為新類型的內部實現的話,我們最好自己關聯,如果我們不僅想重用內部實現而且還想重用接口的話,那就用泛化。

4.依賴

依賴是一種極為松散的類組織結構。

引用

總結

以上是生活随笔為你收集整理的java中类与类的关系_Java中类与类的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。