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

一篇文章帶你了解Java基礎(chǔ)-接口

 更新時間:2021年08月05日 11:12:11   作者:太子爺哪吒  
這篇文章主要介紹了java接口基礎(chǔ)知識,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Java基礎(chǔ)知識(接口)

接口

Java接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)。

接口的定義

接口:

  • 在JAVA編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。而接口是更加徹底的抽象,接口中全部是抽象方法。(JDK8之前),接口同樣是不能創(chuàng)建對象的。
  • 并且為了彌補我們之前繼承中只能單繼承的缺點,Java為了我們提供了接口,它可以多實現(xiàn)接口。
  • 接口更像是表達(dá)一種能力規(guī)范,就想之前我們定義動物,動物有吃的行為方法,而其他實現(xiàn)了動物接口類的動物都必須實現(xiàn)吃這一行為方法。所以其作用主要告訴實現(xiàn)類,你要實現(xiàn)我里面所具備的功能。

那么接口和抽象有什么區(qū)別嗎?

接口和抽象的區(qū)別

  • 抽象類中的方法可以有方法體,就是能實現(xiàn)方法的具體功能,但是接口中的方法不行。
  • 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
  • 接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法),而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法。
  • 一個類只能繼承一個抽象類,而一個類卻可以實現(xiàn)多個接口。

注意:

JDK 1.8 以后,接口里可以有靜態(tài)方法和方法體了,接口允許包含具體實現(xiàn)的方法,該方法稱為默認(rèn)方法,默認(rèn)方法使用 default 關(guān)鍵字修飾。

具體的學(xué)習(xí),我們一起來看看吧!

接口的格式

主要通過interface關(guān)鍵字修飾在類上,使其成為一個接口類!接口中的所有方法都必須只聲明方法標(biāo)識,而不要去聲明具體的方法體。

//接口的格式:
修飾符 interface 接口名稱{
    // 抽象方法
    void eat();
}

而如果類需要去實現(xiàn)該接口的關(guān)鍵字implements。

實現(xiàn)的過程需注意的點:

  • 必須重寫實現(xiàn)的全部接口中所有抽象方法。
  • 如果一個類實現(xiàn)了接口,但是沒有重寫完全部接口的全部抽象方法,這個類也必須定義成抽象類。
//實現(xiàn)接口的格式:
修飾符 class 類名 implements 接口名 {
    // 實現(xiàn)接口中的所有抽象方法
    void eat(){}
}

// 多實現(xiàn)的格式:
修飾符 class 類名 implements 接口1,接口2,接口3...{
	// 抽象方法
    void eat();
    ....
}

接口中的主要成分

我們這里先講述在JDK8之前,接口中的成分包含:抽象方法和常量

抽象方法:

接口中的抽象方法默認(rèn)會自動加上public abstract修飾程序員無需自己手寫?。?/p>

按照規(guī)范:以后接口中的抽象方法建議不要寫上public abstract,為什么呢?因為沒有必要啊,默認(rèn)會加上。

package src.com.na.pojo;
/**
 * 先定義一個接口父類 --> 動物類
 * 動物都有一個吃的抽象方法
 */
public interface Animal {

    // 定義為抽象方法后,無需去做方法實體的實現(xiàn)!
    // 默認(rèn)修飾符就是public abstract 可以忽略不寫!
//    public abstract void eat();
    // 這種寫法也可以,默認(rèn)忽略了public abstract
    void eat();
}

常量:

在接口中,我們定義的成員變量默認(rèn)會加上: public static final修飾。

這代表了什么,在接口中定義的成員變量實際上是一個常量,而我們知道被final關(guān)鍵字修飾的變量是不可被修改,并且也被static靜態(tài)化修飾了變量,這意味著我們可以直接用接口名訪問。

而我們在定義成員變量即常量必須要給初始值。

package src.com.na.pojo;
/**
 * 先定義一個接口父類 --> 動物類
 * 動物都有一個吃的抽象方法
 */
public interface Animal {
    // 定義成員變量是常量
    // 默認(rèn)修飾符就是public static final 可以忽略不寫!
//    public static final String NAME = "動物";
    String NAME = "動物";
}

注意:常量命名規(guī)范建議字母全部大寫,多個單詞用下劃線連接。即ANIMAL_NAME

接口的案例

我們這次以運動員為例吧,這蘇神,看得我心血來潮,這不比什么博人傳、奧特曼來的熱血多了嗎。

定義運動員接口

package src.com.na.pojo;
/**
 * 定義一個運動員接口類,運動員可以分很多種:比如田徑運動員,舉重運動員,乒乓球運動員等。
 * 定義了這些運動員之間的一些規(guī)范。
 */
public interface SportMan {
    // 例如:運動員,都可以運動,都有對應(yīng)的項目吧
    void project();
    // 運動員都會有比賽成績,結(jié)果吧。
    void performance();
    // 運動員都會參加什么比賽得到什么獎吧,排在第幾位吧!
    String competition(String project);  
}

定義田徑運動員子類去實現(xiàn)運動員接口

package src.com.na.pojo;
/**
 * 定義一個田徑運動員,蘇神 yyds! 9.83s
 */
public class AthleticsMan implements SportMan{
    /*
    實現(xiàn)接口后,必須重寫里面的所有抽象方法?。?!
     */
    @Override
    public void project() {
        System.out.println("蘇神參加了奧運會100米項目?。?);
    }
    @Override
    public void performance() {
        System.out.println("蘇神創(chuàng)造了歷史,代表亞洲人可以沖進100米決賽,踏進決賽!并創(chuàng)造了亞洲記錄9.83s!!!!");
    }
    @Override
    public String competition(String project) {
        return "蘇炳添參加"+project+"得到第六名!yyds!!!";
    }
}

定義測試類:

package src.com.na;
import src.com.na.pojo.AthleticsMan;
/**
 * 測試接口
 */
public class Demo {
    public static void main(String[] args) {
        AthleticsMan suBingTian = new AthleticsMan();
        suBingTian.project();
        suBingTian.performance();
        System.out.println(suBingTian.competition("100米"));
    }
}

結(jié)果:

蘇神參加了奧運會100米項目?。?br /> 蘇神創(chuàng)造了歷史,代表亞洲人可以沖進100米決賽,踏進決賽!并創(chuàng)造了亞洲記錄9.83s!!!!
蘇炳添參加100米得到第六名!yyds!!!

接口與接口的關(guān)系

我們知道類與類之間可以有繼承關(guān)系,而我們接口與類之間是實現(xiàn)關(guān)系,那么接口與接口之間的關(guān)系呢?

在Java中,接口與接口之間是可以多繼承的:也就是一個接口可以同時繼承多個接口。相當(dāng)于在繼承中,將其他接口其他接口的抽象方法與本接口進行了合并。

代碼如下:

package src.com.na;
public class Demo2 {
}

// run接口
interface Run{
    void run();
}
interface Project{
    void Project();
}
/*
 *  總結(jié):
 *     接口與類之間是多實現(xiàn)的。
 *     接口與接口之間是多繼承的。
 * */
interface SportMan2 extends Run , Project {
    String competition(String project);  // 抽象方法,比賽。
}

JDK 8之后的接口新增方法

在JDK 8開始之后,接口似乎變得不再純潔了!

接口中不再只是抽象方法,接口還可以有默認(rèn)方法(也就是實例方法),和靜態(tài)方法了,還包含了私有實例方法和私有靜態(tài)方法

1. 含有默認(rèn)方法和靜態(tài)方法

  • 默認(rèn)方法:使用 default 修飾,不可省略,供子類調(diào)用或者子類重寫。
  • 靜態(tài)方法:使用 static 修飾,供接口直接調(diào)用。

代碼如下:

package src.com.na.pojo;
/**
 * 測試接口中可以含有默認(rèn)方法和靜態(tài)方法
 */
public interface InterfaceTest {
    // 含有默認(rèn)方法,default關(guān)鍵字
    public default void defaultMethod() {
        System.out.println("默認(rèn)方法");
    }
    // 含有靜態(tài)方法,static關(guān)鍵字
    public static void staticMethod() {
        System.out.println("靜態(tài)方法");
    }
}

2. 含有私有方法和私有靜態(tài)方法

  • 私有方法:使用 private 修飾,供接口中的默認(rèn)方法或者靜態(tài)方法調(diào)用。
  • 私有靜態(tài)方法:使用 private 修飾,使用 static 修飾。

代碼如下:

package src.com.na.pojo;
/**
 * 測試接口中可以含有私有方法和私有靜態(tài)方法
 */
public interface InterfaceTest2 {
    // 含有私有方法,private修飾
    private void privateMethod() {
        System.out.println("私有方法");
    }
    // 含有私有靜態(tài)方法,static關(guān)鍵字,private修飾
    private static void privateStaticMethod() {
        System.out.println("私有靜態(tài)方法");
    }
}

接口的特點:

  • 接口中的方法全是抽象方法,默認(rèn)會自動加上public abstract修飾。
  • 接口中,無法定義成員變量,但是可以定義常量,其值不可以改變,默認(rèn)使用public static final修飾。
  • 接口中,沒有構(gòu)造器,所以是不能創(chuàng)建對象滴!
  • 類與接口之間的關(guān)系是多實現(xiàn)的。
  • 接口與接口之間關(guān)系是多繼承的。
  • 接口更多體現(xiàn)的是一種規(guī)范。
  • JDK 8開始,接口不再純潔,支持靜態(tài)方法,默認(rèn)方法,私有方法。

總結(jié)

相信各位看官都對Java基礎(chǔ)中的抽象和接口的知識和使用有了一定了解,等待下一次更多Java基礎(chǔ)的學(xué)習(xí)吧!

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 多數(shù)據(jù)源模式JPA整合sharding-jdbc實現(xiàn)數(shù)據(jù)脫敏

    多數(shù)據(jù)源模式JPA整合sharding-jdbc實現(xiàn)數(shù)據(jù)脫敏

    這篇文章主要為大家介紹了JPA項目中多數(shù)據(jù)源模式整合sharding-jdbc來實現(xiàn)數(shù)據(jù)脫敏,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • web項目WEB-INF下沒有web.xml的解決方法

    web項目WEB-INF下沒有web.xml的解決方法

    新手如果在web項目創(chuàng)建后WEB-INF下面沒有出現(xiàn)web.xml,怎么辦?別慌,沒有web.xml文件的原因是因為在創(chuàng)建web項目的時候沒有把創(chuàng)建web.xml勾上。這篇文章主要介紹了web項目WEB-INF下沒有web.xml的解決方法,需要的朋友可以參考下
    2022-12-12
  • 一篇超詳細(xì)的Spring Boot對jdbc支持的文章

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

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

    Java并發(fā)編程中的Exchanger解析

    這篇文章主要介紹了Java并發(fā)編程中的Exchanger解析,Exchanger用于線程間數(shù)據(jù)的交換,它提供一個同步點,在這個同步點,兩個線程可以交換彼此的數(shù)據(jù),這兩個線程通過exchange方法交換數(shù)據(jù),如果第一個線程先執(zhí)行exchange()方法,需要的朋友可以參考下
    2023-11-11
  • Java經(jīng)典快排思想以及快排的改進講解

    Java經(jīng)典快排思想以及快排的改進講解

    今天小編就為大家分享一篇關(guān)于Java經(jīng)典快排思想以及快排的改進講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 詳解如何在SpringBoot中使用WebMvc

    詳解如何在SpringBoot中使用WebMvc

    Spring?Boot?是一個快速、簡單的開發(fā)框架,在?Spring?Boot?中,我們可以使用?WebMvc?來構(gòu)建?Web?應(yīng)用程序,所以本文就來講講如何在SpringBoot中使用WebMvc吧
    2023-06-06
  • 登陸驗證碼kaptcha結(jié)合spring boot的用法詳解

    登陸驗證碼kaptcha結(jié)合spring boot的用法詳解

    在一個web應(yīng)用中驗證碼是一個常見的元素。不管是防止機器人還是爬蟲都有一定的作用,下面這篇文章主要給大家介紹了登陸驗證碼kaptcha結(jié)合spring boot用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • Java ArrayList深入源碼層分析

    Java ArrayList深入源碼層分析

    Java中容器對象主要用來存儲其他對象,根據(jù)實現(xiàn)原理不同,主要有3類常用的容器對象:ArrayList使用數(shù)組結(jié)構(gòu)存儲容器中的元素、LinkedList使用鏈表結(jié)構(gòu)存儲容器中的元素
    2023-01-01
  • SpringFox實現(xiàn)自動生成RESTful?API文檔

    SpringFox實現(xiàn)自動生成RESTful?API文檔

    在開發(fā)?RESTful?API?時,編寫?API?文檔是一個重要的任務(wù),這篇文章為大家介紹了如何使用?SpringFox?自動生成?RESTful?API?文檔,并提供示例代碼,需要的可以參考一下
    2023-06-06
  • SpringBoot使用自動配置xxxAutoConfiguration

    SpringBoot使用自動配置xxxAutoConfiguration

    這篇文章介紹了SpringBoot自動配置xxxAutoConfiguration的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論

许昌县| 河津市| 曲松县| 诸城市| 大同县| 赤峰市| 若羌县| 湖南省| 开江县| 容城县| 塔河县| 晋宁县| 永昌县| 阜城县| 宁晋县| 出国| 高阳县| 葫芦岛市| 东阿县| 德保县| 通江县| 甘谷县| 西安市| 宜兰县| 正镶白旗| 山东| 斗六市| 榕江县| 巴南区| 博罗县| 鄢陵县| 平陆县| 简阳市| 巴林右旗| 舟曲县| 鹤山市| 明光市| 大同县| 赫章县| 阳谷县| 平安县|