導航:首頁 > 編程語言 > java的組合與繼承

java的組合與繼承

發布時間:2023-05-29 23:02:54

A. java 為什麼說多用組合,少用繼承

java組合我沒聽收過,但是繼承通常都會和實現放在一起說:
在java中,通常一個類只能繼承一個類,但一個類卻可以實現多個介面,所以採用實現的方式寫代碼會更加靈活

B. Java里如何實現多繼承

介面(interface) 介面被用來建立類與類之間關聯的標准 Java code public interface ITest{ public void test(); } public class TestImpl implements ITest{ public void test(){ System out println( test ); } }

抽象類(abstract class) 只要類中有一個抽象方法 此類就被標記為抽象類 實際上抽象類除了被繼承之外沒有任何意義

區別 介面是公開(public)的 裡面不能有私有的方法或變數 是用於讓別人使用的 實現介面的一定要實現介面里定義的所有方法 而抽象類是可以有私有方法或私有變數的 實現抽象類可以有選擇地重寫需要用到的方法 但是必須實現裡面所有的抽象方法 抽象類在 Java 語言中表示的是一種繼承關系 一個類只能使用一次繼承關系 但是 一個類卻可以實現多個interface(java中實現多重繼承的方法之一) 抽象類中可以有自己的數據成員 也可以有非abstarct的成員方法 而在介面中 只能夠有靜態的不能被修改的數據成員(也就是必須是 static final的 不過在 interface中一般不定義數據成員) 而且所有的成員方法都是抽象的 抽象類和介面所反映出的設計理念不同 其實abstract class表示的是 is a 關系 interface表示的是 like a 關系 (組合是 has a 關系) 介面中定義的變數默認是public static final 型 且必須給其初值 所以實現類中不能重新定義 也不能改變其值 抽象類塵辯中的變數默認是 friendly 型 其值可以在子類中重新定義 也可以重新賦值

一般的應用里 最頂級的是介面 然後是抽象類實現介面 最後才到具體類實現 不是很建議具體類直接實現介面的 還有一種設計模式是面向介面編程 而非面向實現編程

其實介面是抽象類的延伸 可以將它看做是純粹的抽象類 就是說介面比抽象類還抽象 還有設計介面的目的就是為了實現C++中的多重繼承 不過java團隊設計的一樣更有趣的東西來實現這個功能 那就是內部類(inner class)

內部類(inner class) Java code public class OuterClass{//外部類 private class InnerClass{}//內部類 }

一 定義 放在一個類的內部的類我們就叫內部類 二 作用 內部類可以很好的實現隱藏 也就是封裝性 一般的非內部類 是不允許有 private 與protected許可權的 但內部類虧散可以 內部類擁有外圍類的所有元素的訪問許可權 可是實現多重繼承(這個特點非常重要 個人認為它是內部類存在的最大理由之一) 可以避免修改介面而實現同一個類中兩種同名方法的調用 三 多重繼承的實現

類一 Java code public class Example {

public String getName() { return luffyke ; } }

類二 Java code public class Example {

public int getAge() { return ; } }

類三

Java code public class MainExample {

public class Test extends Example { public String getName() { return super getName(); } }

public class Test extends Example { public int getAge() { return super getAge(); } }

public String showName() {銷兄氏 return new Test () getName(); }

public int showAge() { return new Test () getAge(); }

public static void main(String args[]) { MainExample example = new MainExample(); System out println( 姓名: + example showName()); System out println( 年齡: + example showAge()); } }

lishixin/Article/program/Java/hx/201311/26594

C. java中繼承的好處是什麼,在組合和繼承中該如何取捨

1,繼承提高了代碼的重復利用性;

2,繼承是面向對象的,一類事物可以獨立存在,解藕了類與類之間的斗聯系。
3,繼承更利於程序的設計。
5,在組合中,一定要把同一類事物放在一起,和現實生活中一樣,每一類事物都是有自己的共性和自己的特性,按毛主席的矛盾論說是:矛盾的普遍性與特殊性,普遍性就是繼承來的。
6,在寫代碼之前,分析和設計是關鍵的一步,這一步解決的就是哪些類是同類的,哪些東西是公共的。

D. java通過「組合和 繼承」關系表現出汽車跑車以及和卡車的類的關系

汽車類有輪胎,方向盤,引擎等組合而成,所以,輪胎一個類,方向盤一個類,引擎一個類,等。。。在寫個汽車搜中類里用組合。

卡車繼承汽車,在碼漏侍比汽車多點東西,比如 載重?跑車繼承汽車,多個屬性 比如 速度 這就你你自己去想了,遇到問題 自己先思考,不會了翻翻書,最後才去問遲吵別人,但是別人只會告訴你思路。。

E. 談談Java中的繼承與組合

繼承和組合的概念

在新類里簡單地創建原有類的對象 我們把這種方法叫作 組合 因為新類由現有類的對象合並而成 我們只是簡單地重復利用代碼的功能 而不是採用它的形式

第二種方法是創建一個新類 將其作為現有類的一個 類型 我們可以原樣採取現有類的形式 並在其中加入新代碼 同時不會對現有的類產生影響 這種魔術般的行為叫作 繼承 (Inheritance) 涉及的大多數工作都是由編譯器完成的 對於面向對象的程序設計 繼承 是最重要的基礎概念之一 對於組合和繼承這兩種方法 大多數語法和行為都是類似的(因為它們都要根據現有的類型生成新類型)

組合也就是一個類的對象是另外一個類的成員 一般的程序都有組合的意味 只不過是基本數據類型是成員變數 下面請看具體的例子

class Head

{

Head(){

System out println( head );

}

}

class Body

{

Body(){

System out println( body );

}

}

class Person()

{

Head h=null;

Body b=null;

Person() //人是由頭和身體組成的 Head和Body的對象是Person的一部分

{

h=new Head();

b =new Body();

}

}

繼承作為面向對象的三個重要特性的一個方面 在面向對象的領域有著及其重要的作用 好像沒聽說哪個面向對象的語言不支持繼承

class Person

核扮桐{

private String name=null;

private int age= ;

public Person(String n int a)

{

name=n;

age=a;

}

int getAge()

{

return age;

}

String getName()

{

return name;

}

void getDescription()

{

System out println( name: +name+ + age: +age);

}

}

class Student extends Person

{

private String studno=null;

public Student(String n String no int a)

{

super(n a);

studno=no;

}

}

說明:Student類中有三個成員變數name age studno和一個方法getDescription();

注意:子類繼承了父類的所有變數和函數 只是缺孫子類不能訪問父類的private類型的變數和函數 其實privae類型的變數還是繼承到子類中的

無論還是繼承 都允許我們將子對象置於自己的新類中 大家或許會奇怪兩者間的差異 以及到底該如何選擇

如果想利用新類內部一個現有類的特性 而不想使用它的介面 通常應選擇組合 也就是說 我們可嵌入一個對象 使自己能用它實現新類的特性 但新類的用戶會看到我們已定義的介面 而不是來自嵌入對象的介面 考慮到這種效果 我們改坦需在新類里嵌入現有類的private對象

有些時候 我們想讓類用戶直接訪問新類的組合 也就是說 需要將成員對象的屬性變為public 成員對象會將自身隱藏起來 所以這是一種安全的做法 而且在用戶知道我們准備合成一系列組件時 介面就更容易理解 car(汽車)對象便是一個很好的例子

class Engine {

public void start() {}

public void rev() {}

public void stop() {}

}

class Wheel {

public void inflate(int psi) {}

}

class Window {

public void rollup() {}

public void rolldown() {}

}

class Door {

public Window window = new Window();

public void open() {}

public void close() {}

}

public class Car {

public Engine engine = new Engine();

public Wheel[] wheel = new Wheel[ ];

public Door left = new Door()

right = new Door(); // door

Car() {

for(int i = ; i < ; i++)

wheel[i] = new Wheel();

}

public static void main(String[] args) {

Car car = new Car();

car left window rollup();

car wheel[ ] inflate( );

}

} ///:~

由於汽車的裝配是故障分析時需要考慮的一項因素(並非只是基礎設計簡單的一部分) 所以有助於客戶程序員理解如何使用類 而且類創建者的編程復雜程度也會大幅度降低

如選擇繼承 就需要取得一個現成的類 並製作它的一個特殊版本 通常 這意味著我們准備使用一個常規用途的類 並根據特定的需求對其進行定製 只需稍加想像 就知道自己不能用一個車輛對象來組合一輛汽車——汽車並不 包含 車輛 相反 它 屬於 車輛的一種類別 屬於 關系是用繼承來表達的 而 包含 關系是用組合來表達的

protected

現在我們已理解了繼承的概念 protected這個關鍵字最後終於有了意義 在理想情況下 private成員隨時都是 私有 的 任何人不得訪問 但在實際應用中 經常想把某些東西深深地藏起來 但同時允許訪問衍生類的成員 protected關鍵字可幫助我們做到這一點 它的意思是 它本身是私有的 但可由從這個類繼承的任何東西或者同一個包內的其他任何東西訪問 也就是說 Java中的protected會成為進入 友好 狀態

我們採取的最好的做法是保持成員的private狀態——無論如何都應保留對基 礎的實施細節進行修改的權利 在這一前提下 可通過protected方法允許類的繼承者進行受到控制的訪問

import java util *;

class Villain {

private int i;

protected int read() { return i; }

protected void set(int ii) { i = ii; }

public Villain(int ii) { i = ii; }

public int value(int m) { return m*i; }

}

public class Orc extends Villain {

private int j;

public Orc(int jj) { super(jj); j = jj; }

public void change(int x) { set(x); }

} ///:~

可以看到 change()擁有對set()的訪問許可權 因為它的屬性是protected(受到保護的)

再論合成與繼承

lishixin/Article/program/Java/hx/201311/26635

F. Java編程:組合,繼承和代理的區別

組合的話,是在類中new一個對象,然後就只能調用這個對象的方法了,是死的

而你用代理的話,代理不僅要new那個對象,還要把你想調用這個對象的方法也寫出來,方法實現是通過這個new的對象來實現的,當然你也可以在方法中添加你自己想實現的功能,這樣做又有了繼承中重寫的感覺,所以說代理是繼承和組合的中庸之道,lz可以看看thinking in java7.3章 7.4章 還有網頁鏈接這篇博客,寫的很詳細

G. JAVA中什麼是繼承

繼承在本職上是特殊一般的關系,即常說的is-a關系。子類繼承父類,表明子類是一種特殊的父類,並且具有父類所不具有的 一些屬性或方法。

1.Java繼承的語法格式:

Java繼承的關鍵字是:extends

public class 子類名 extends 父類名{...}

如: public class UNStudent extends Student {...} 註:1.子類又稱超類,拓展類 ;父類又稱基類。

2.Java中類的繼承只能是單繼承(單根繼承),即一個類只能繼承一個父類,但是一個類可以由多個類來繼承它。

3.Java會給每一個沒有設置父類的類,自動添加一個父類就是Object 。

(7)java的組合與繼承擴展閱讀:

一、子類繼承父類的結果

1.子類繼承父類後,繼承到了父類所有的屬性和方法。註:是所有。

2.子類可調用的方法也要看情況而定:

子類和父類在同一個包下時 「子類和子類的對象」可以調用父類的默認的,受保護的,公有的屬性以及方法。

子類和父類在不同的包下時,在子類中可以調用受保護的,公有的屬性以及方法,而子類的對象可以調用受保護的,公有的屬性以及方法。

二、方法的重寫

1.當子類和父類都有某種方法,而子類的方法更加要求細致,或者實現功能不同,就需要方法的重寫。

2.重寫條件

①必須要存在繼承關系;只有繼承之間的關系才能有方法的重寫

②方法的返回值類型,方法名,參數個數,參數類型,參數順序,必須要完全一致;

如:父類中方法 public void play (int n ; String s){方法體1...}

重寫後的子類方法public void play(int n ; String s){方法體2...}

3.子類重寫方法時的訪問修飾符可以大於或者等於父類方法的訪問修飾符。

4.重寫後的方法會被優先調用。

三、自動轉型

自動轉型的實現要求有繼承關系

格式如下:父類名 對象名 = new 子類構造方法;

如:Student stu = new UNStudent;

而強制轉型格式如下:子類名 對象名 = (子類名)父類對象名

如:UNStudent un = (Student)stu;

自動轉型可以拓寬方法的作用訪問域

在使用自動轉型後,子類自己定義的方法是不能在自動轉型後執行;

原因是因為Java的編譯機制,它會優先判斷父類中是否存在該方法,如果存在則通過編譯,如果不存在則報錯。

第二種自動轉型:轉型後只需要不同類的不同對象調用想吐的方法,很方便!

/**訪問修飾符 返回值數據類型 方法名(父類類型 參數名,...){

調用方法。

}

父類名 對象名 = new 子類名;

子類名 對象名 = new 子類名;

方法名(對象名);

*/

比如拿到駕駛證為A2的人,可以駕駛重型貨車,當然也可以駕駛大型貨車,中型貨車,小型貨車,小客車,小轎車,摩托車... 可以選擇第二種自動轉型的方法,便於調用同一個方法。

自動轉型好處:1.減少冗餘代碼;2.在方法設置參數時,擴大訪問范圍。

四、多態

多態是由方法重載,繼承,方法重寫,自動轉型等技術的組合。

五、為什麼需要繼承?

1.提高代碼的重用性。

2.提高程序的擴展性。

JAVA繼承總結

H. Java中合成和繼承的區別

java中的繼承用的關鍵字是extends,而實褲陸現用的關鍵字是implements;java中類的繼承只能是單繼承,而實現胡畢頃可以是多實現。java中的繼承可以繼承數做父類的所有方法。

I. java中的組合與繼承!

繼承:春顫
class A{
//.....
}
class B extends A{
//.....
}
組合:(組扒察敗合不是沒晌重寫)
class A{
//.....
}
class B{
A a;
}

J. java重用和繼承的區別

繼承是重用的一種方式。重用最常見的兩種方式是組合和繼承。
組合通常使用在需要既有類的特性,而不是它的介面的時候。這個時候在新類中使用既有類來幫助你實現新的功能,新類的使用者看到的是新類的介面而不是既有類的介面,而且你還可以使用private來對重用的類進行隱藏。如在新類中定義List<String> list =new ArrayList<>();
繼承則通常是在你需要既有類的介面,但是需要對這些進口的實現定義特殊的版本(即重寫父類方法)。

閱讀全文

與java的組合與繼承相關的資料

熱點內容
韓國大寸度電影 瀏覽:384
大山電影在線觀看 瀏覽:796
androidcreator 瀏覽:30
交通信號燈單片機編程 瀏覽:970
鬼抓人百度網盤 瀏覽:726
電鍍pdf 瀏覽:723
主角叫張凡有個系統 瀏覽:61
泰國電影永恆完整版百度雲 瀏覽:685
現代父子訓誡文 瀏覽:638
psef如何查看伺服器是否啟動 瀏覽:594
安卓手機如何投屏逍客 瀏覽:165
兒子干後媽的電影叫什麼 瀏覽:17
日韓在線資源中文字幕免費 瀏覽:143
第一彈app怎麼清除瀏覽歷史 瀏覽:898
1980法國電影少年的秘密 瀏覽:953
滿清十部電影大全 瀏覽:292
周末夫妻演員 瀏覽:345
末世之一女多男推薦 瀏覽:567
電腦VIP影視 瀏覽:395
看電影不要會員的網站 瀏覽:894