国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java接口操作(繼承父類(lèi)并實(shí)現(xiàn)多個(gè)接口)

瀏覽:19日期:2022-08-23 11:55:40

/*

使用接口的時(shí)候,需要注意:

1. 接口是沒(méi)有靜態(tài)代碼塊或者構(gòu)造方法的。 2. 一個(gè)類(lèi)的直接父類(lèi)是唯一的,但是一個(gè)類(lèi)可以同時(shí)實(shí)現(xiàn)多個(gè)接口。

格式:

public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB { // 覆蓋重寫(xiě)所有抽象方法}

3. 如果實(shí)現(xiàn)類(lèi)所實(shí)現(xiàn)的多個(gè)接口當(dāng)中,存在重復(fù)的抽象方法,那么只需要覆蓋重寫(xiě)一次即可。

A接口

package cn.itcast.day10.demo02; public interface MyInterfaceA { // 錯(cuò)誤寫(xiě)法!接口不能有靜態(tài)代碼塊// static {//// } // 錯(cuò)誤寫(xiě)法!接口不能有構(gòu)造方法// public MyInterfaceA() {//// } public abstract void methodA(); public abstract void methodAbs(); public default void methodDefault() { System.out.println('默認(rèn)方法AAA'); } }

B接口

package cn.itcast.day10.demo02; public interface MyInterfaceB { // 錯(cuò)誤寫(xiě)法!接口不能有靜態(tài)代碼塊// static {//// } // 錯(cuò)誤寫(xiě)法!接口不能有構(gòu)造方法// public MyInterfaceA() {//// } public abstract void methodB(); public abstract void methodAbs(); public default void methodDefault() { System.out.println('默認(rèn)方法BBB'); } }

實(shí)現(xiàn)類(lèi)有多個(gè)接口

package cn.itcast.day10.demo02; public class MyInterfaceImpl /*extends Object*/ implements MyInterfaceA, MyInterfaceB { @Override public void methodA() { System.out.println('覆蓋重寫(xiě)了A方法'); } @Override public void methodB() { System.out.println('覆蓋重寫(xiě)了B方法'); } @Override public void methodAbs() { System.out.println('覆蓋重寫(xiě)了AB接口都有的抽象方法'); } // A B 都有 覆蓋一次 @Override public void methodDefault() { System.out.println('對(duì)多個(gè)接口當(dāng)中沖突的默認(rèn)方法進(jìn)行了覆蓋重寫(xiě)'); }}

只覆蓋重寫(xiě)了一次。

4. 如果實(shí)現(xiàn)類(lèi)沒(méi)有覆蓋重寫(xiě)所有接口當(dāng)中的所有抽象方法,那么實(shí)現(xiàn)類(lèi)就必須是一個(gè)抽象類(lèi)。

package cn.itcast.day10.demo02; public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB { @Override public void methodA() { } // 沒(méi)有寫(xiě)methodB那么實(shí)現(xiàn)類(lèi)是抽象類(lèi) @Override public void methodAbs() { } @Override public void methodDefault() { } }

抽象方法methodB沒(méi)有重寫(xiě)覆蓋,那么實(shí)現(xiàn)類(lèi)成為了抽象類(lèi)。

5. 如果實(shí)現(xiàn)類(lèi)鎖實(shí)現(xiàn)的多個(gè)接口當(dāng)中,存在重復(fù)的默認(rèn)方法,那么實(shí)現(xiàn)類(lèi)一定要對(duì)沖突的默認(rèn)方法進(jìn)行覆蓋重寫(xiě)(A,B兩個(gè)接口中都寫(xiě)了默認(rèn)方法,沖突了)。見(jiàn)3.中實(shí)現(xiàn)類(lèi)中覆蓋重寫(xiě)了A,B中的兩個(gè)默認(rèn)方法

6. 一個(gè)類(lèi)如果直接父類(lèi)當(dāng)中的方法,和接口當(dāng)中的默認(rèn)方法產(chǎn)生了沖突,優(yōu)先用父類(lèi)當(dāng)中的方法。

Fu類(lèi)

package cn.itcast.day10.demo02; public class Fu { public void method() { System.out.println('父類(lèi)方法'); } }

MyInterface接口

package cn.itcast.day10.demo02; public interface MyInterface { public default void method() { System.out.println('接口的默認(rèn)方法'); } }

直接父類(lèi)當(dāng)中的方法,和接口當(dāng)中的默認(rèn)方法產(chǎn)生了沖突。

Zi子類(lèi)

package cn.itcast.day10.demo02; public class Zi extends Fu implements MyInterface {}

調(diào)用method方法,看哪個(gè)優(yōu)先

package cn.itcast.day10.demo02; public class Demo01Interface { public static void main(String[] args) { Zi zi = new Zi(); zi.method(); } }

調(diào)用子類(lèi)對(duì)象的method方法,發(fā)現(xiàn)使用的是父類(lèi)中的而不是接口中的方法,父類(lèi)的優(yōu)先級(jí)比接口優(yōu)先級(jí)更高。

運(yùn)行結(jié)果:

父類(lèi)方法

Process finished with exit code 0

*/

補(bǔ)充知識(shí):java從對(duì)象開(kāi)始(類(lèi),父類(lèi)與繼承,抽象,接口)

1、對(duì)象(類(lèi)class)

在程序設(shè)計(jì)時(shí),我們往往會(huì)接觸到各種形形色色的現(xiàn)實(shí)已存在的對(duì)象,這些對(duì)象都是需要我們?cè)诔绦蛑袑?shí)例化出來(lái)進(jìn)行業(yè)務(wù)操作的。不過(guò)從數(shù)量和復(fù)雜上講可以說(shuō)比我們現(xiàn)實(shí)中接觸的事物是有過(guò)之而無(wú)不及的。

2、父類(lèi)與繼承

當(dāng)對(duì)象類(lèi)型繁雜數(shù)量繁多時(shí)我們就會(huì)像生物學(xué)上對(duì)各種生物進(jìn)行分門(mén)別類(lèi),對(duì)我們收集到的對(duì)象以屬性或者功能又或者其他標(biāo)準(zhǔn)進(jìn)行分類(lèi)目。而這些我們最終分出來(lái)的各種類(lèi)目往往在程序中被定義為父類(lèi),它是對(duì)我們收集到的對(duì)象中某些具有相同屬性或者功能又或者其他相似特征的對(duì)象集合的總稱(chēng)。好似一個(gè)包含各種文件的文件夾,它本身在程序中并無(wú)任何業(yè)務(wù)操作的意義。

不過(guò)注意的是在不同情形不同問(wèn)題域下,由于分類(lèi)標(biāo)準(zhǔn)不同,父類(lèi)也會(huì)成為某個(gè)父類(lèi)的子類(lèi),所以會(huì)形成一種樹(shù)狀關(guān)系結(jié)構(gòu),父類(lèi)在關(guān)系結(jié)構(gòu)中與其他對(duì)象類(lèi)并無(wú)差別。

分類(lèi)完成后,現(xiàn)在我們就可以以父類(lèi)為標(biāo)準(zhǔn)來(lái)操作一類(lèi)對(duì)象了。但這時(shí)我們對(duì)分類(lèi)好的對(duì)象進(jìn)行實(shí)例化會(huì)發(fā)現(xiàn)那些相同的屬性功能或者其他相似特征都需要在其對(duì)象中重復(fù)編寫(xiě),像這種程度的分類(lèi)并不是我們想要的。

于是,我們又給父類(lèi)賦予新的功能,它不再是單純的對(duì)對(duì)象進(jìn)行分類(lèi)了。我們提取出相同的屬性和功能特征放在父類(lèi)中,讓我們需要操作的對(duì)象僅僅關(guān)注自己特有的屬性和功能特征,其余的屬性和功能特征都可通過(guò)繼承父類(lèi)來(lái)?yè)碛小_@樣我們就解決了相同屬性功能重復(fù)編寫(xiě)的問(wèn)題,并且還能對(duì)共有屬性功能進(jìn)行規(guī)范化操作。

3、抽象類(lèi)

因?yàn)楦割?lèi)并無(wú)任何業(yè)務(wù)操作意義,我們就對(duì)各種父類(lèi)進(jìn)行管理為它們添加abstract關(guān)鍵詞,讓它們無(wú)法實(shí)例化,這樣就避免了實(shí)例化對(duì)象是不正確的或者某些人分不清具體要操作哪些對(duì)象而實(shí)例化父類(lèi)的問(wèn)題。因?yàn)檫@些父類(lèi)無(wú)法實(shí)例化,所以我們把它們稱(chēng)為——抽象類(lèi)。通過(guò)這樣的設(shè)定我們就會(huì)在程序中以抽象類(lèi)為節(jié)點(diǎn)形成各種層級(jí)關(guān)系。

于是我們樹(shù)狀關(guān)系機(jī)構(gòu)又變成了具有清晰層級(jí)關(guān)系的樹(shù)狀關(guān)系結(jié)構(gòu)。

4、小結(jié)

父類(lèi)的提出是進(jìn)行歸類(lèi)操作,那么繼承則是去重和規(guī)范化的操作,而抽象在此基礎(chǔ)上又進(jìn)行了關(guān)系的分層級(jí)和類(lèi)對(duì)象實(shí)例化操作的規(guī)范。

5、接口

前面說(shuō)我們對(duì)每個(gè)對(duì)象根據(jù)某種特征進(jìn)行分類(lèi)了,但有時(shí)我們會(huì)因?yàn)槟承┨赜心康臉?biāo)準(zhǔn)不一樣,有時(shí)以屬性分類(lèi)有時(shí)以功能分類(lèi),但有些對(duì)象可能擁有相同屬性不擁有相同功能,有些對(duì)象擁有相同功能不擁有相同屬性。這時(shí)我們就會(huì)把這些在父類(lèi)中沒(méi)有的屬性或者功能但其他對(duì)象又有相識(shí)功能或?qū)傩詥为?dú)抽取出來(lái)作為接口來(lái)為這些對(duì)象服務(wù)。

從抽取相同屬性或者功能這點(diǎn)來(lái)看,接口實(shí)則是對(duì)我們已分類(lèi)好具有清晰層級(jí)的樹(shù)狀關(guān)系結(jié)構(gòu)再次進(jìn)行一次去重復(fù)操作,從而我們的對(duì)象從具有清晰層級(jí)的樹(shù)狀關(guān)系結(jié)構(gòu)變成了更加靈活的網(wǎng)狀形結(jié)構(gòu)。

但是在提取父類(lèi)分類(lèi)時(shí)我們一般會(huì)以相同屬性來(lái)進(jìn)行分類(lèi),那么那些不同的功能會(huì)單獨(dú)提取到接口中,接口和抽象類(lèi)相似的是都不會(huì)進(jìn)行具體方法功能的實(shí)現(xiàn),只是將相同的功能申明好進(jìn)行規(guī)范化操作。具體實(shí)現(xiàn)會(huì)具體到對(duì)象再進(jìn)行實(shí)現(xiàn)。

對(duì)象進(jìn)行去重再提取后那些因?yàn)樵诓煌割?lèi)中具有相同功能的對(duì)象又以另外一種標(biāo)準(zhǔn)分類(lèi)到某種接口中了。比如某某對(duì)象的某某功能和某某對(duì)象的某某功能都是來(lái)至于某某接口的。從而我們對(duì)對(duì)象進(jìn)行操作又多了一種標(biāo)準(zhǔn),可以通過(guò)判斷是否具有某種功能進(jìn)行篩選對(duì)象進(jìn)其操作。

6、總結(jié)

從功能點(diǎn)上看接口與(抽象和父類(lèi)和繼承)的提出都是對(duì)我們程序中的對(duì)象進(jìn)行歸類(lèi)操作,去除那些重復(fù)的代碼。并且在接口和抽象類(lèi)中都是可以對(duì)某些屬性和方法功能進(jìn)行規(guī)范化約束,從而我們?cè)趯?duì)對(duì)象進(jìn)行業(yè)務(wù)操作中就更加便捷清晰。對(duì)象與對(duì)象的關(guān)系更加明朗。

以上這篇Java接口操作(繼承父類(lèi)并實(shí)現(xiàn)多個(gè)接口)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 定南县| 西吉县| 新龙县| 淮安市| 灵丘县| 大同市| 香港 | 巴彦县| 任丘市| 娄底市| 晋中市| 大化| 富民县| 丰宁| 泸西县| 英山县| 城市| 从江县| 如皋市| 玉溪市| 高碑店市| 鹤庆县| 扬州市| 颍上县| 博乐市| 霍邱县| 瓦房店市| 江油市| 乌鲁木齐市| 永春县| 舒兰市| 鹤岗市| 河曲县| 彰化县| 岑溪市| 贡山| 龙门县| 外汇| 大渡口区| 拉孜县| 望奎县|