【Java 8】十弥搞、包和接口

如果所有類都放一起開發(fā)邮绿,方便易記的類名很快用完渠旁,也很容易出現(xiàn)協(xié)作時(shí)命名沖突的問題。
包是Java提供的一種命名機(jī)制船逮,同時(shí)也是一種可見性控制機(jī)制顾腊。

包定義

Java使用文件系統(tǒng)目錄存儲(chǔ)包,包名必須和目錄路徑一致挖胃,包括大小寫

//定義包名杂靶,寫在Java源文件中的第一條語句
package pkg;

//層次化
package java.awt.img;
包查找與CLASSPATH

Java運(yùn)行時(shí)怎么找到這些包呢?

package MyPack;

3種方式:
1冠骄、Java程序運(yùn)行目錄下有MyPack目錄
2伪煤、CLASSPATH環(huán)境變量下有Mypack目錄
3、運(yùn)行程序時(shí)通過-classpath選項(xiàng)指明包路徑運(yùn)行

訪問保護(hù)

類成員的訪問控制機(jī)制

而對【非嵌套類】只有2種訪問級(jí)別
默認(rèn)級(jí)別:只能被同包中的其它類訪問凛辣。
公有級(jí)別:任何其它代碼都可訪問抱既;要求該類是文件中唯一一個(gè)公有類,切文件名要和類名完全一致扁誓。

導(dǎo)入包

import java.util.Data;
import java.io.*;//導(dǎo)入整個(gè)包

Java隱式地為所有代碼都導(dǎo)入了java.lang包防泵,相當(dāng)于每個(gè)源文件開頭都添加了

import java.lang.*;

import語句是可選的,也可以選擇使用完全限定名來使用類

class MyDate extends java.util.Date{
}

接口

使用interfere創(chuàng)建接口蝗敢,可用于指定類必須實(shí)現(xiàn)哪些功能

定義接口
interface Callback{
  void callback(int param);
}

1捷泞、如果接口沒有修飾符,采用默認(rèn)訪問級(jí)別寿谴,只有聲明接口的包中的其它成員才能訪問接口锁右。
2、如果接口聲明為public讶泰,那么所有代碼都可以使用接口咏瑟,且接口是當(dāng)前文件中的唯一公有接口,文件名必須和接口同名痪署。
3码泞、JDK 8及以后的版本中,可以為接口創(chuàng)建默認(rèn)實(shí)現(xiàn)狼犯。
4余寥、接口中可以聲明變量,隱式標(biāo)識(shí)為final和static悯森,所有實(shí)現(xiàn)接口的類都不能修改他們宋舷,還必須初始化他們。
5瓢姻、所有方法和變量都隱式聲明為public肥缔。

實(shí)現(xiàn)接口
class Client implements Callback{
  public void callback(int p){
    System.out.println(p);
  }
}

1、實(shí)現(xiàn)接口方法時(shí),必須聲明為public
2续膳、使用接口調(diào)用方法改艇,是在運(yùn)行時(shí)動(dòng)態(tài)查詢到方法并執(zhí)行,和常規(guī)方法調(diào)用相比占用更多資源坟岔,對性能要求苛刻的代碼中謹(jǐn)慎使用谒兄。

class TestIface{
  public static void main(String args[]){
    //使用接口調(diào)用方法
    Callback c = new Client();
    //調(diào)用的方法是來自對象,而不是類型變量
    c.callback(42);
  }
}

部分實(shí)現(xiàn):
如果類實(shí)現(xiàn)一個(gè)接口社付,但是沒有實(shí)現(xiàn)所有接口方法承疲,那么必須講這個(gè)類聲明為abstract

abstract class Incomplete implements Callback{
  void show(){
    System.out.println("Good");
  }
}
接口中的變量

創(chuàng)建一個(gè)包含變量的接口,實(shí)現(xiàn)這個(gè)接口的類相當(dāng)于把這些這些變量當(dāng)作常量導(dǎo)入到類的命名控件下鸥咖。

interface SharedConstants{
  int NO = 0;
  int YES = 1;
  int NULL = 2;
}

這種用法有爭議燕鸽,僅作介紹

接口的繼承

接口可以繼承,實(shí)現(xiàn)一個(gè)子接口啼辣,必須實(shí)現(xiàn)這個(gè)接口的繼承鏈上所有接口的所有方法啊研。

默認(rèn)接口方法default

【JDK8】才出現(xiàn)
默認(rèn)方法也稱擴(kuò)展方法
可以為接口的方法提供默認(rèn)實(shí)現(xiàn)
動(dòng)機(jī):
1、當(dāng)接口需要增加一個(gè)方法鸥拧,那么實(shí)現(xiàn)接口的類必須實(shí)現(xiàn)這個(gè)方法党远,導(dǎo)致增加方法會(huì)破壞原有代碼;
2富弦、提供可選方法沟娱。例如有一個(gè)接口有一個(gè)方法remove,有2個(gè)類都實(shí)現(xiàn)了這個(gè)接口腕柜,其中一個(gè)類希望他是不可刪除的济似,原來方法就需要寫一個(gè)remove的空實(shí)現(xiàn)。現(xiàn)在有了默認(rèn)方法盏缤,可以在接口默認(rèn)空實(shí)現(xiàn)砰蠢,或拋出異常,這樣類就不用去做空實(shí)現(xiàn)了蛾找。

public interface MyIF{
  //使用default關(guān)鍵字
  default String getString(){
    return "Default";
  }
}

優(yōu)點(diǎn):
1、優(yōu)雅地隨時(shí)間演進(jìn)接口
2赵誓、提供可選功能打毛,且類不必在不需要該功能時(shí)提供占位符實(shí)現(xiàn)。

不同接口的同名方法

一個(gè)類實(shí)現(xiàn)了2個(gè)接口俩功,2個(gè)接口都有默認(rèn)方法reset幻枉,那么使用方法的順序如下:
1、類有實(shí)現(xiàn)诡蜓,優(yōu)先類的實(shí)現(xiàn)
2熬甫、類沒有重寫實(shí)現(xiàn),則報(bào)錯(cuò)
如果是一個(gè)接口繼承另外一個(gè)接口蔓罚,且有仙童默認(rèn)方法椿肩,則繼承接口的版本更高優(yōu)先級(jí)

//顯式調(diào)用被繼承接口中的默認(rèn)實(shí)現(xiàn)
SuperInterface.super.reset();

9.6 在接口中使用靜態(tài)方法

【JDK 8】才出現(xiàn)
可以在接口中直接定義靜態(tài)方法瞻颂,然后直接調(diào)用

public interface MyIF{
  static int getDefaultNumber(){
    return 0;
  }
}

//調(diào)用
int a = MyIF.getDefaultNumber();

注意:
1、實(shí)現(xiàn)接口的類或子接口不會(huì)集成接口中的靜態(tài)方法郑象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贡这,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子厂榛,更是在濱河造成了極大的恐慌盖矫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件击奶,死亡現(xiàn)場離奇詭異辈双,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)柜砾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門湃望,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人局义,你說我怎么就攤上這事喜爷。” “怎么了萄唇?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵檩帐,是天一觀的道長。 經(jīng)常有香客問我另萤,道長湃密,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任四敞,我火速辦了婚禮泛源,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忿危。我一直安慰自己达箍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布铺厨。 她就那樣靜靜地躺著缎玫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解滓。 梳的紋絲不亂的頭發(fā)上赃磨,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音洼裤,去河邊找鬼邻辉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的值骇。 我是一名探鬼主播莹菱,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雷客!你這毒婦竟也來了芒珠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤搅裙,失蹤者是張志新(化名)和其女友劉穎皱卓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體部逮,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娜汁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兄朋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掐禁。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颅和,靈堂內(nèi)的尸體忽然破棺而出傅事,到底是詐尸還是另有隱情,我是刑警寧澤峡扩,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布蹭越,位于F島的核電站,受9級(jí)特大地震影響教届,放射性物質(zhì)發(fā)生泄漏响鹃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一案训、第九天 我趴在偏房一處隱蔽的房頂上張望买置。 院中可真熱鬧,春花似錦强霎、人聲如沸忿项。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轩触。三九已至,卻和暖如春椿争,著一層夾襖步出監(jiān)牢的瞬間怕膛,已是汗流浹背熟嫩。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工秦踪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓椅邓,卻偏偏與公主長得像柠逞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子景馁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容