真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java代碼復(fù)用技術(shù) java代碼重用

java中的復(fù)用類是什么意思

代碼復(fù)用能夠大大簡化我們的工作。面向?qū)ο蟮恼Z言中一般是通過對類的重復(fù)使用來達(dá)到代碼復(fù)用的目的的,Java也不例外。在Java中,復(fù)用類有兩種方式,合成(has-a)與繼承(is-a)。合成就是在新的類中直接創(chuàng)建舊類的對象,這里我們復(fù)用的只是代碼的功能而不是它的形式。而繼承是在原有的類的基礎(chǔ)上建立一個(gè)新類,新類具有舊類的形式,但也加入了一些新的特性。這一章介紹的主要就是合成與繼承方面的知識(shí)。

創(chuàng)新互聯(lián)公司擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊(duì),在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十年,專業(yè)且經(jīng)驗(yàn)豐富。十年網(wǎng)站優(yōu)化營銷經(jīng)驗(yàn),我們已為上千余家中小企業(yè)提供了做網(wǎng)站、網(wǎng)站制作解決方案,定制網(wǎng)站制作,設(shè)計(jì)滿意,售后服務(wù)無憂。所有客戶皆提供一年免費(fèi)網(wǎng)站維護(hù)!

一、合成所使用的語法

合成的語法很簡單,只要把要復(fù)用的類的對象的引用直接放到新類里就可以了。當(dāng)然僅僅這樣還是不夠的,我們還要?jiǎng)?chuàng)建這個(gè)類的對象讓那個(gè)引用來指向它。因?yàn)镴ava不會(huì)幫我們自動(dòng)創(chuàng)建一個(gè)缺省的對象,它只會(huì)自動(dòng)替我們把字段中的引用初始化為null。為引用賦值可以在三個(gè)地方,一個(gè)就是在定義這個(gè)引用的時(shí)候,另一個(gè)是在構(gòu)造函數(shù)中,第三個(gè)地方就是在即將要使用這個(gè)對象之前。為了防止忘記在使用前為引用賦值,我們一般應(yīng)該在前兩種場合來創(chuàng)建對象。如果我們要?jiǎng)?chuàng)建的這個(gè)對象會(huì)花費(fèi)很大開銷,而且又可能不是每次都需要?jiǎng)?chuàng)建它的話,我們可以考慮第三種方式來創(chuàng)建這個(gè)對象。

二、繼承所使用的語法

繼承是Java中的重要部分,因?yàn)镴ava是使用單根體系的(C++不是這樣,因?yàn)樗3窒駽的兼容),所以我們定義的每一個(gè)類都是繼承自Java中的根類Object類。在定義一個(gè)繼承自已有的類的類時(shí),要使用extends關(guān)鍵字,其后跟上基類的名字,這樣表示新定義的這個(gè)類是繼承自那個(gè)基類。在Java中不允許多重繼承(C++中允許),也就是說它不允許一個(gè)類擁有多于一個(gè)的基類,這點(diǎn)劣勢可以用接口來彌補(bǔ),因?yàn)镴ava允許一個(gè)類實(shí)現(xiàn)任意多個(gè)接口。

一個(gè)子類會(huì)自動(dòng)獲得基類中的全部字段與方法(那些由訪問控制符控制的對子類而言不可見的成員也會(huì)獲得,只是不可見,用不了),這也就是對基類中代碼的復(fù)用。除了自動(dòng)獲得自基類的代碼外,子類中還可定義新的成員,也可以覆寫基類中的方法(所謂覆寫指的是方法的聲明部分一樣但實(shí)現(xiàn)不一樣),這樣可以讓相同簽名的方法擁有不一樣的形為。

因?yàn)樽宇愖詣?dòng)擁有了基類的成員,因此在子類中自然就可以調(diào)用基類的方法。如果這個(gè)方法在子類中被覆寫過,那編譯器知道你是要調(diào)用哪個(gè)方法呢?Java提供了super關(guān)鍵字在類中表示該類的基類的引用,我們可以通過這個(gè)關(guān)鍵字來明確表示我們要用到的是基類中的成員。如果不寫super的話,那編譯器將會(huì)理解為嵌套調(diào)用。

這里有個(gè)題外話。在Java程序中常常是用public類中的main()方法做為整個(gè)程序的入口。這樣的靜態(tài)main()方法并不是非得要在public類中才能出現(xiàn)的,靜態(tài)的main()方法可以做所有類的入口(但只能是main(),而不能是其它名字的什么靜態(tài)方法)。比如一個(gè)程序有多個(gè)class組成,我們要對其中的某個(gè)class進(jìn)行單元測試時(shí),我們就可以在這個(gè)class文件中加入main(),編譯后生成這個(gè)類的.class文件,在控制臺(tái)通過java來運(yùn)行它就是了。

子類繼承了一個(gè)基類后便擁有了基類中的成員,也就可以通過創(chuàng)建的子類對象來訪問基類中可見的成員。Java是怎樣做到這一點(diǎn)的呢?在我們創(chuàng)建一個(gè)子類對象的時(shí)候,這里創(chuàng)建的已經(jīng)不是一個(gè)類的對象了,它還會(huì)創(chuàng)建這個(gè)類的基類的對象,這個(gè)基類的對象創(chuàng)建后被包括在子類的對象中。也就是說創(chuàng)建的子類的對象擁有其基類全部的成員(從這就可以知道為什么可以上傳),但是子類對象只能訪問基類中它可見的成員。那么在創(chuàng)建一個(gè)這樣的對象時(shí),子類和基類對象創(chuàng)建的順序是怎么樣的呢?為了能夠正確的初始化基類,一般會(huì)調(diào)用基類的構(gòu)造函數(shù)來進(jìn)行初始化。Java中在調(diào)用子類的構(gòu)造函數(shù)時(shí)首先會(huì)自動(dòng)的調(diào)用基類的構(gòu)造函數(shù),并且這樣的過程是層層傳遞的。比如C繼承了B,而B又繼承了A,在創(chuàng)建C的對象時(shí),C的構(gòu)造函數(shù)會(huì)首先調(diào)用B的構(gòu)造函數(shù),這時(shí)B的構(gòu)造函數(shù)又會(huì)首先調(diào)用A的構(gòu)造函數(shù)。(如果基類中沒有默認(rèn)構(gòu)造函數(shù),編譯時(shí)就會(huì)報(bào)錯(cuò)。)但是這里自動(dòng)調(diào)用的都是基類的默認(rèn)構(gòu)造函數(shù)(無參的),如果我們想調(diào)用基類的某個(gè)帶參數(shù)的構(gòu)造函數(shù)又該怎么辦呢?上面提到可以用super來代替基類的引用,與在構(gòu)造函數(shù)中通過this調(diào)用本類其它構(gòu)造函數(shù)的形式一樣,我們可以通過super來調(diào)用基類帶參數(shù)的構(gòu)造函數(shù),比如“super(i, j)”。與調(diào)用本類的其它構(gòu)造函數(shù)一樣,對基類構(gòu)造函數(shù)的顯示調(diào)用也需要放在子類構(gòu)造函數(shù)的最前面,在它之前不能有任何東西,如果基類的構(gòu)造函數(shù)會(huì)拋出異常需要捕獲的話,就會(huì)比較麻煩。

JAVA設(shè)計(jì)模式優(yōu)先使用的復(fù)用技術(shù)是什么?

在復(fù)用上,

優(yōu)先使用組合,而不是繼承

。Think

in

Java書上的話。

Java僅僅有一個(gè)參數(shù)不一致,如何提高代碼復(fù)用性

如果你用的是eclipse可以用快捷鍵來抽取方法的,就是選中重復(fù)的代碼,然后按alt+shift+m,就解決你的代碼重復(fù)問題。

簡述JAVA中繼承實(shí)現(xiàn)代碼復(fù)用

看看下面這個(gè)例子,就會(huì)明白了:JAVA中繼承可以實(shí)現(xiàn)代碼復(fù)用,

由于在父類中已經(jīng)定義的方法,被子類繼承以后,就可以使用,實(shí)現(xiàn)了代碼的復(fù)用

class Father{

private int moneyDollar=300;

int moneyHK=200;

int add(int x,int y){

return x+y;

}

}

class Son extends Father{

int moneyRMB=800;

public void changMoneyHK(int x){

moneyHK=x;

}

public void changMoneyRMB(int x){

moneyRMB=x;

}

int subs(int x,int y){

return x-y;

}

}

class GrandSon extends Son{

int multi(int x,int y){

return x*y;

}

}

public class Example5_1{

public static void main(String args[]){

int a=5,b=3;

Son son=new Son();

GrandSon sunzi=new GrandSon();

son.changMoneyHK(666);

son.changMoneyRMB(5000);

System.out.println("兒子的港幣是繼承的屬性,當(dāng)前的值是:"+son.moneyHK);

System.out.println("兒子的人民幣是新增的屬性,當(dāng)前的值是:"+son.moneyRMB);

System.out.printf("減法是兒子新增的功能,%d-%d等于%d\n",a,b,son.subs(a,b));

System.out.printf("加法是兒子繼承的功能,%d+%d等于%d\n",a,b,son.add(a,b));

System.out.println("孫子的港幣和人民幣都是繼承的屬性,,當(dāng)前的值是:");

System.out.println("港幣:"+sunzi.moneyHK+" 人民幣:"+sunzi.moneyRMB);

System.out.printf("乘法是孫子新增的功能,%d*%d等于%d\n",a,b,sunzi.multi(a,b));

System.out.printf("加法是孫子繼承的功能,%d+%d等于%d\n",a,b,sunzi.add(a,b));

System.out.printf("減法是孫子繼承的功能,%d-%d等于%d\n",a,b,sunzi.subs(a,b));

}

}


文章名稱:java代碼復(fù)用技術(shù) java代碼重用
文章分享:http://weahome.cn/article/ddgiseg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部