最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的接口及其應(yīng)用場(chǎng)景解讀

 更新時(shí)間:2023年05月08日 17:12:26   作者:回水  
這篇文章主要介紹了Java中的接口及其應(yīng)用場(chǎng)景解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、接口的特點(diǎn)

1.如果一個(gè)抽象類中的所有方法都是抽象的,則可以將這個(gè)類定義為Java中的另一種形式——接口。接口是一種特殊的抽象類,接口中只有全局常量和抽象方法,是一種更純粹的抽象概念。

2.在JDK8中,對(duì)接口進(jìn)行了重新定義,接口中除了有抽象方法外,還可以有默認(rèn)方法和靜態(tài)方法;默認(rèn)方法可以被繼承和覆寫,靜態(tài)方法不能被繼承和覆寫。

3.一般來說,接口的使用表示兩種場(chǎng)景:

  • ①接口表示具備某種能力/行為,子類實(shí)現(xiàn)接口是并不是is a關(guān)系,而是具備這種能力或行為
  • ②接口表示一種規(guī)范或者標(biāo)準(zhǔn)。

4.在接口中,定義抽象方法時(shí) public abstract關(guān)鍵字可以省略,定義全局常量時(shí) static final可以省略。

5.接口的子類可以實(shí)現(xiàn)多個(gè)父接口,接口也不能直接實(shí)例化對(duì)象,需要通過子類(普通類)向上轉(zhuǎn)型。

6.接口和接口之間也可以是繼承關(guān)系,但是接口絕對(duì)不能繼承一個(gè)類。

二、定義接口

1.interface關(guān)鍵字

與定義類不同的是,在定義接口的時(shí)候,不再使用class關(guān)鍵字,而是使用interface關(guān)鍵字來聲明。

語法格式:修飾符 interface 接口名 { }

創(chuàng)建一個(gè)USB接口,里面有兩個(gè)抽象方法

代碼如下:

public interface USB{
//表示插入
	public abstract void plugIn();
//表示工作
	public abstract void work();
}

2.implements關(guān)鍵字

子類使用implements關(guān)鍵字來實(shí)現(xiàn)接口,必須覆寫接口中所有的抽象方法

代碼如下:

public class KeyBoard implements USB {
	@Override
    public void plugIn() {
        System.out.println("安裝鍵盤驅(qū)動(dòng)");
    }
    @Override
    public void work() {
        System.out.println("鍵盤正常工作");
    }
}

三、應(yīng)用場(chǎng)景

1.接口表示規(guī)范

USB接口表示一種規(guī)范,鼠標(biāo)鍵盤耳機(jī)等等這些外設(shè)都屬于USB接口的子類,我們?cè)谌粘I钪惺褂秒娔X的時(shí)候,我們并不關(guān)心到底哪個(gè)具體設(shè)備插入了我們的電腦,只要這個(gè)設(shè)備滿足了USB接口,就都能被電腦識(shí)別并使用。

就是說,一個(gè)接口,可以接受無數(shù)種設(shè)備,只要這個(gè)設(shè)備滿足USB接口,都可以插入電腦并被電腦識(shí)別。

兼容所有的USB子類對(duì)象。

public interface USB{
//表示插入
	public abstract void plugIn();
//表示工作
	public abstract void work();
}
public class Mouse implements USB{
    @Override
    public void plugIn() {
        System.out.println("安裝鼠標(biāo)驅(qū)動(dòng)");
    }
    @Override
    public void work() {
        System.out.println("鼠標(biāo)正常工作");
    }
}
public class KeyBoard implements USB {
	@Override
    public void plugIn() {
        System.out.println("安裝鍵盤驅(qū)動(dòng)");
    }
    @Override
    public void work() {
        System.out.println("鍵盤正常工作");
    }
}
public class Camera implements USB{
    @Override
    public void plugIn() {
        System.out.println("安裝相機(jī)驅(qū)動(dòng)中");
    }
    @Override
    public void work() {
        System.out.println("相機(jī)開始正常工作");
    }
}
//電腦這個(gè)類不是USB接口的子類,他是USB規(guī)范的使用者
public class Computer {
    public static void main(String[] args) {
        Computer computer = new Computer();
        Mouse mouse = new Mouse();
        Keyboard keyboard = new Keyboard();
        Camera camera = new Camera();
        computer.fun(mouse);
        computer.fun(keyboard);
        computer.fun(camera);
    }
    /**
    *為什么此時(shí)fun方法的參數(shù)是USB usb呢?如果我們寫成fun(Mouse mouse),那么這個(gè)fun只能識(shí)別鼠標(biāo),其他的根本識(shí)別不了,我們得寫好多個(gè)方法去實(shí)現(xiàn)。
    *我們這里用他們共同的接口當(dāng)做參數(shù),這樣不管傳進(jìn)來的是什么設(shè)備,只要你實(shí)現(xiàn)了USB這個(gè)接口,那你就可以被識(shí)別
    *假設(shè)我們現(xiàn)在多了一個(gè)子類Earphone(耳機(jī))類,實(shí)現(xiàn)了USB接口,那我們的fun方法里一行多的代碼都不用寫,直接實(shí)例化對(duì)象,將引用名傳進(jìn)去就行。
    */
    public void fun(USB usb) {
        usb.plugIn();
        usb.work();
    }
}

2.接口表示能力/行為

接口允許多實(shí)現(xiàn),一個(gè)類可以具備多個(gè)能力,同時(shí)實(shí)現(xiàn)多個(gè)父接口,若實(shí)現(xiàn)多個(gè)父接口,子類(普通類),必須覆寫所有的抽象方法。

代碼如下:

//游泳接口,表示具備游泳這個(gè)行為
public interface ISwim {
? ? //可以省略public abstrac
//public abstract void swim();
? ? void swim();
}
//具備跑這個(gè)行為
public interface IRun {
//可以省略public abstrac
? ? void run();
//public abstract void run();
}
//表示能飛
public interface IFly {
//public abstract void fly();
//可以省略public abstrac
? ? void fly();
}
//只具備跑的行為
public class Rabbit implements IRun{
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("兔子在跑~");
? ? }
}
//具備跑和游泳的能力
public class Dog implements IRun,ISwim{
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("狗子在跑~");
? ? }
? ? @Override
? ? public void swim() {
? ? ? ? System.out.println("狗子在游泳~");
? ? }
}
//三種能力都具備
public class Duck implements IRun,ISwim,IFly{
? ? @Override
? ? public void fly() {
? ? ? ? System.out.println("鴨子在飛~");
? ? }
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("鴨子在跑~");
? ? }
? ? @Override
? ? public void swim() {
? ? ? ? System.out.println("鴨子在游泳~");
? ? }
}
//定義一個(gè)測(cè)試類進(jìn)行測(cè)試
public class Test {
? ? public static void main(String[] args) {
? ? ? ? IRun run = new Rabbit();
? ? ? ? IRun run1 = new Dog();
? ? ? ? ISwim swim = new Dog();
? ? ? ? IFly fly = new Duck();
? ? ? ? run.run();
? ? ? ? run1.run();
? ? ? ? swim.swim();
? ? ? ? fly.fly();
? ? }
}

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

四、接口和類之間的關(guān)系

接口和子類之間是一種混合關(guān)系,不具備is a關(guān)系。上面的Dog和Rabbit都具備跑的能力,但是這兩個(gè)類彼此之間沒啥關(guān)系。

1.當(dāng)一個(gè)類實(shí)現(xiàn)接口時(shí),如果這個(gè)類是抽象類,只需要實(shí)現(xiàn)接口種的部分抽象方法,如果是一個(gè)普通類,則需要覆寫接口中所有的抽象方法。

2.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,接口之間用英文逗號(hào)隔開。

3.接口之間可以通過extends關(guān)鍵字實(shí)現(xiàn)繼承,并且一個(gè)接口可以同時(shí)繼承多個(gè)接口,接口之間用英文逗號(hào)隔開。

4.一個(gè)類在繼承一個(gè)類的同時(shí),還可以實(shí)現(xiàn)多個(gè)接口,此時(shí),extends關(guān)鍵字必須位于implements關(guān)鍵字之前。

語法如下:

修飾符 class 類名 extends 父類名 implements 接口1,接口2{} 

public class Test {
}
interface IA{
//接口中抽象方法可以省略public abstract
    void testA();
}
interface IB{
    void testB();
}
//接口之間存在繼承關(guān)系,可以多繼承。
//接口堅(jiān)決不能繼承一個(gè)類
interface IC extends IA,IB{
//IC接口同時(shí)繼承多個(gè)父接口,繼承了所有的抽象方法
//子類實(shí)現(xiàn)IC接口時(shí),必須覆寫所有的抽象方法
}
class CImpl implements IC{
    @Override
    public void testA() {
    }
    @Override
    public void testB() {
    }
}
abstract class Person{
}
//一個(gè)類繼承一個(gè)類,同時(shí)實(shí)現(xiàn)多個(gè)接口
//修飾符 class 類名 extends 父類名 implements 接口1,接口2{}
class China extends Person implements IA,IB{
    @Override
    public void testA() {
    }
    @Override
    public void testB() {
    }
}

五、接口的命名規(guī)范

為了區(qū)分接口和類,命名使用 I 開頭,IRun,ISwim等等,子類實(shí)現(xiàn)一個(gè)接口時(shí),命名以相應(yīng)的接口開頭,以impl結(jié)尾。

例如:如果是IRun的子類,Runimpl(不是強(qiáng)制要求,但盡量做到)。

如果子類實(shí)現(xiàn)多個(gè)父接口,不需要使用此規(guī)范來命名

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java基礎(chǔ)鞏固抽象類與接口詳解

    Java基礎(chǔ)鞏固抽象類與接口詳解

    在類中沒有包含足夠的信息來描繪一個(gè)具體的對(duì)象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-05-05
  • Java中wait()與sleep()兩者的不同深入解析

    Java中wait()與sleep()兩者的不同深入解析

    在Java多線程編程中,wait()和sleep()是控制線程執(zhí)行和等待的兩個(gè)關(guān)鍵方法,但它們?cè)趹?yīng)用場(chǎng)景和實(shí)現(xiàn)上有顯著差異,這篇文章主要介紹了Java中wait()與sleep()兩者的不同,需要的朋友可以參考下
    2024-11-11
  • 如何讓Spring Rest 接口中路徑參數(shù)可選

    如何讓Spring Rest 接口中路徑參數(shù)可選

    這篇文章主要介紹了如何讓Spring Rest 接口中路徑參數(shù)可選,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    JdbcTemplate 是在JDBC API基礎(chǔ)上提供了更抽象的封裝,并提供了基于方法注解的事務(wù)管理能力。 通過使用SpringBoot自動(dòng)配置功能并代替我們自動(dòng)配置beans,下面給大家介紹spring boot中使用JdbcTemplate相關(guān)知識(shí),一起看看吧
    2021-07-07
  • SpringBoot 配置提示功能(超詳細(xì))

    SpringBoot 配置提示功能(超詳細(xì))

    這篇文章主要介紹了SpringBoot 配置提示功能,本文給大家介紹的超詳細(xì),通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java IO流 文件傳輸基礎(chǔ)

    Java IO流 文件傳輸基礎(chǔ)

    這篇文章主要介紹了Java IO流 文件傳輸基礎(chǔ)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • 學(xué)習(xí)C語言對(duì)后期java有幫助嗎

    學(xué)習(xí)C語言對(duì)后期java有幫助嗎

    在本篇文章里小編給大家整理的是一篇關(guān)于學(xué)習(xí)C語言對(duì)后期java有幫助嗎的基礎(chǔ)文章,有興趣的朋友們可以參考下。
    2020-11-11
  • 關(guān)于eclipse中運(yùn)行tomcat提示端口被占用的4種解決

    關(guān)于eclipse中運(yùn)行tomcat提示端口被占用的4種解決

    這篇文章主要介紹了關(guān)于eclipse中運(yùn)行tomcat提示端口被占用的4種解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java中字符串常見的一些拼接方式總結(jié)

    Java中字符串常見的一些拼接方式總結(jié)

    字符串拼接是我們?cè)贘ava代碼中比較經(jīng)常要做的事情,就是把多個(gè)字符串拼接到一起,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java中字符串常見的一些拼接方式,需要的朋友可以參考下
    2023-04-04
  • SpringBoot整合Thymeleaf與FreeMarker視圖層技術(shù)

    SpringBoot整合Thymeleaf與FreeMarker視圖層技術(shù)

    在目前的企業(yè)級(jí)應(yīng)用開發(fā)中,前后端分離是趨勢(shì),但是視圖層技術(shù)還占有一席之地。Spring Boot 對(duì)視圖層技術(shù)提供了很好的支持,福安防推薦使用的模板引擎是Thymeleaf,不過想FreeMarker也支持,JSP技術(shù)在這里并不推薦使用
    2022-08-08

最新評(píng)論

花莲县| 澄江县| 盐边县| 石台县| 甘泉县| 广灵县| 富裕县| 慈溪市| 沅陵县| 临桂县| 扶绥县| 雷州市| 治多县| 获嘉县| 定日县| 巴里| 华蓥市| 康定县| 封丘县| 巴林左旗| 靖宇县| 邮箱| 民乐县| 普格县| 方正县| 西和县| 宾阳县| 长宁区| 吐鲁番市| 剑川县| 齐河县| 闻喜县| 城市| 蒙城县| 洛阳市| 连山| 米泉市| 田林县| 长岭县| 分宜县| 博客|