黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 編程基礎之Java中類繼承、接口實現的一些細節(jié)

編程基礎之Java中類繼承、接口實現的一些細節(jié)

更新時間:2020-07-16 16:21:54 來源:動力節(jié)點 瀏覽2308次

在Java中,子類繼承父類,類實現接口是屬于常識性的內容了,作為一個Java程序員應該也比較熟悉。不過子類繼承父類,類實現接口中還是有一些小細節(jié)值得注意一下,本文就從個人工作、學習中入手,總結一些細節(jié)性的內容,以更進一步地掌握繼承、實現的關系。現在只是寫一些目前碰到的內容,以后只要想到了、碰到了任何繼承、實現相關問題,都會保持更新此文。

編程基礎之Java中類繼承、接口實現的一些細節(jié)

接口A有void C()方法,接口B有int C()方法,則無法同時實現這兩個接口

Java為了彌補類單繼承的不足,引入了類多實現接口的機制,不過多實現某個接口也是有一定限制的,比如:

public?interface?A
{
?void?C();
}
public?interface?B
{
?int?C();
}

那么同時實現這兩個接口是不可能的:

編程基礎之Java中類繼承、接口實現的一些細節(jié)

這個錯誤是無法被修復的。試想,類AB實現接口A和接口B,那么接口A里面的抽象方法和接口B里面的抽象方法參數列表都相同僅有返回值不同,類AB應該實現哪個呢?實現接口A的"void C()",那么接口B的"int C()"怎么辦?實現接口B的"int C()"那么接口A的"void C()"怎么辦?因為"void C()"、"int C()"屬于方法參數相同,返回值不同,這兩個方法是不可以重載的,所以同時實現兩個方法也不可能。因此,在這里Java只能報錯了。

A是接口,B實現A,C繼承B,則C也是A的子類

有一個接口A,B實現了A接口,C繼承自B類,則C也是A的子類,看一下:

public?interface?A
{
}
public?class?B?implements?A
{
}
public?class?C?extends?B
{
}
public?static?void?main(String[]?args)
{
?C?c?=?new?C();
?System.out.println(c?instanceof?A);
}

返回結果是true。這是一個不難理解的結論,想到求證這個結論是因為有一次在研究LinkedHashMap的時候:

public?class?LinkedHashMap
?extends?HashMap
?implements?Map

既然LinkedHashMap已經繼承了HashMap了,HashMap是Map的實現類,那為什么LinkedHashMap還要實現Map呢,豈不是多此一舉嗎?由此想到了會不會是因為繼承了HashMap不代表LinkedHashMap是Map的子類所以LinkedHashMap要專門再實現一下Map,做了上面的實驗,發(fā)現是我多慮了,可能Sun的開發(fā)人員就想這么寫吧,呵呵。

父子類中有同名屬性

這不是錯誤,只是會造成歧義而已,而且也可能會造成返回我們不想要的結果,主要原因可能是開發(fā)者對父類代碼不熟悉所導致的(尤其是在父類定義的屬性一大堆的場景下)。舉個例子:

public?class?Father
{
?private?int?i;?
?public?Father()
?{
?}
?public?Father(int?i)
?{
?this.i?=?i;
?}
?public?int?getFatherI()
?{
?return?i;
?}
}
public?class?Son?extends?Father
{
?private?int?i;
?
?public?Son(int?i)
?{
?super(100);
?this.i?=?i;
?}
?public?int?getSonI()
?{
?return?i;
?}
}
public?static?void?main(String[]?args)
{
?Son?son?=?new?Son(50);
?System.out.println("Son?getFatherI():"?+?son.getFatherI());
?System.out.println("Son?getSonI():"?+?son.getSonI());
}
運行結果為:
Son getFatherI():100
Son getSonI():50

提出這個問題是因為我們擔心父子類的同名屬性會不會存在覆蓋的情況,從運行結果來看,完全不用擔心這個問題。

一個實現類繼承自一個抽象類并且實現了多個接口,那么必須實現所有未被實現的抽象方法

舉個例子:

public?interface?InterfaceA
{
?void?A1();
?void?A2();
}
public?interface?InterfaceB
{
?void?B1();
?void?B2();
}
public?abstract?class?AbstractC?implements?InterfaceA,?InterfaceB
{
?public?void?A1(){}?//?我實現了InterfaceA的A1()方法
?public?void?B2(){}?//?我實現了InterfaceB的B2()方法
?
?abstract?void?C();?//?我自己定義了一個抽象方法
}

那么要定義一個ClassD繼承自AbstractC,則必須:

public?class?ClassD?extends?AbstractC
{
?public?void?A2(){}?//?我必須實現InterfaceA中未被實現的A2()方法
?public?void?B1(){}?//?我必須實現InterfaceB中未被實現的B1()方法
?void?C(){}?//?我必須實現AbstractC中未被實現的C()方法
}

以上就是動力節(jié)點java培訓機構的小編針對“編程基礎之Java中類繼承、接口實現的一些細節(jié)”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产精品久久久久久久久免费hd | 污视频网站在线观看免费 | 亚洲图片在线欧美专区图片 | 国产日韩亚洲 | 国产日韩精品在线 | 欧美黄色精品 | a在线免费观看视频 | 国产一级高清视频免费看 | 亚洲欧美日韩综合精品网 | 成在线人免费视频一区二区三区 | 日韩伦理片网站 | 久久国产高清波多野结衣 | japan高清日本乱xxxx | 91精品视频在线播放 | 伊人久久大香线蕉综合网站 | 日韩精品手机在线 | 亚洲免费一区 | 婷婷亚洲综合五月天小说 | 国产高清在线精品一区免费97 | 鲁丝片一区二区三区毛片 | 欧美福利 | 欧美99视频| 一区二区三区四区精品视频 | 久久五月激情婷婷日韩 | 欧美成人xxxxxxxx在线 | 国产日韩欧美成人 | 中文字幕小明 | 日韩欧美一区二区三区在线视频 | 91av综合 | 日韩免费高清 | 一区二区免费视频观看 | 中文字幕日本在线mv视频精品 | 午夜影院啊啊啊 | 欧美日韩高清观看一区二区 | 成人精品人成网站 | 国产激爽大片高清在线观看 | 色天天综合色天天看 | 草草草网站 | 在线视频 二区 | 毛片在线视频在线播放 | 交视频在线播放 |