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

Java中接口的深入詳解

 更新時(shí)間:2021年11月28日 11:27:50   作者:執(zhí)久呀  
在Java語(yǔ)言中,接口由類來(lái)實(shí)現(xiàn)以便使用接口中的方法,這篇文章主要給大家介紹了關(guān)于Java中接口的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、前言

前面我們說(shuō)了抽象類的概述,我們對(duì)抽象類也有個(gè)認(rèn)識(shí)和理解了,現(xiàn)在我們學(xué)習(xí)十分重要的內(nèi)容接口,接口這個(gè)詞比較的抽象,但其實(shí)也是十分好理解的。

二、接口

簡(jiǎn)單的說(shuō),接口就是一種被規(guī)范的標(biāo)準(zhǔn),只要符合這個(gè)標(biāo)準(zhǔn)都可以通用,接口的表現(xiàn)在于對(duì)行為的抽象。 就好比插座,每個(gè)廠商生產(chǎn)的插座我們都可以用,這是因?yàn)樗麄冇型粋€(gè)標(biāo)準(zhǔn),這里插座就是接口。

接口的格式

格式1:

public interface 接口名

格式2:

interface? 接口名

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

①多態(tài)的實(shí)例化用implement關(guān)鍵字

public  interface usb{}//定義一個(gè)接口
 
public  class  computer implements  usb{}//創(chuàng)建一個(gè)類實(shí)現(xiàn)接口

②接口不能被直接實(shí)例化,可以通過(guò)多態(tài)的形式實(shí)現(xiàn)實(shí)例化

usb  u =new computer();

③接口中都是抽象方法和常量,不可能有非抽象方法,常量必須被賦值。

常量默認(rèn)被public? static final

方法默認(rèn)被public static? ?abstractl修飾

public final int  num1=10;√
num1=20;×
int num2=10;√
num2=20;×
上面兩個(gè)正確的寫(xiě)法等價(jià)
public  abstract  void method1();√
void  method2();√

直接int num=10,創(chuàng)建的a是常量

④多態(tài)的前提:

有繼承或?qū)崿F(xiàn)關(guān)系

有方法的重寫(xiě),

有父類或父接口引用指向子類或?qū)崿F(xiàn)類對(duì)象

⑤接口的實(shí)現(xiàn)類

必須重寫(xiě)接口中的所有方法,不想重寫(xiě)則可以是抽象類(加上abstract)

但是子類繼承了該抽象類必須重寫(xiě)接口中的方法。

⑥接口只能被public修飾

接口的使用

service包下

package service;
 
public interface EatService {
    void eat();
}

service包下的impl包下

package service.impl;
 
import service.EatService;
 
public class CatImpl implements EatService {
    @Override
    public void eat() {
        System.out.println("??吃??");
    }
 
}

在controller包下

package controller;
 
import service.EatService;
import service.impl.CatImpl;
 
public class CatController {
    public static void main(String[] args) {
        EatService e=new CatImpl();
        e.eat();
    }
}

四、類與接口的關(guān)系

類和類之間是繼承關(guān)系

接口和接口之間是繼承關(guān)系

類和接口之間是實(shí)現(xiàn)關(guān)系(類實(shí)現(xiàn)接口)

類只支持單繼承(即一個(gè)子類只有一個(gè)父類),可以實(shí)現(xiàn)多個(gè)類

public class  A  extends  B implements C,B,D....{}

接口之間可以多重繼承。

public interface a implements b,c,d.....{}

接口多重繼承的好處

定義了許多接口,如果一個(gè)設(shè)備要同時(shí)實(shí)現(xiàn)那么多接口將是不小的開(kāi)銷(xiāo),對(duì)于同能

同類的可以把他用一個(gè)接口繼承起來(lái),這樣這個(gè)接口就要了那些接口的全部功能,我們

使用類只要實(shí)現(xiàn)一個(gè)就可以了。

接口1

package service;
 
public interface EatService {
    void eat();
}

接口2

package service;
 
public interface PlayService {
    void play();
}

接口3

package service;
 
public interface SleepService {
    void sleep();
}

總接口:用來(lái)繼承上面三個(gè)接口

package service;
 
public interface SumService extends SleepService,EatService,PlayService {
}

此時(shí)原來(lái)的類實(shí)現(xiàn)只要實(shí)現(xiàn)一個(gè)總接口即可

舊:

public class CatImpl implements EatService,PlayService,SleepService {
//方法重寫(xiě)
}

新:

public class CatImpl implements SumService {
//方法重寫(xiě)
}

在controller中調(diào)用也是簡(jiǎn)單不少

package controller;
import service.SumService;
import service.impl.CatImpl;
public class CatController {
    public static void main(String[] args) {
        SumService ss=new CatImpl();
        ss.eat();
        ss.play();
        ss.sleep();
 
    }
}

練習(xí)

定義一個(gè)接口用來(lái)實(shí)現(xiàn)兩個(gè)對(duì)象的比較。

package cn.com.Classwork190124;

public interface CompareObject<object> {
    public int compareto(object o);
    //若返回值是 0 , 代表相等; 若為正數(shù),代表當(dāng)前對(duì)象大;負(fù)數(shù)代表當(dāng)前對(duì)象小
}

定義一個(gè)Circle類。

package cn.com.Classwork190124;

public class Circle {
    private double radius;
    private final double PI=3.14;

    public double findArea(){
        return PI*radius*radius;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }
}

定義一個(gè)ComparableCircle類,繼承Circle類并且實(shí)現(xiàn)CompareObject接口。在ComparableCircle類中給出接口中方法compareTo的實(shí)現(xiàn)體,用來(lái)比較兩個(gè)圓的半徑大小。

package cn.com.Classwork190124;

public class ComparableCircle extends Circle implements CompareObject<Circle> {
    @Override
    public int compareto(Circle o) {
        if(this.getRadius()==o.getRadius()){
            return 0;
        }else if(this.getRadius()<=o.getRadius()){
            return -1;
        }else {
            return 1;
        }
    }
}

定義一個(gè)測(cè)試類TestInterface,創(chuàng)建兩個(gè)ComaparableCircle對(duì)象,調(diào)用compareTo方法比較兩個(gè)類的半徑大小。

package cn.com.Classwork190124;

import java.util.Scanner;

public class TestInterface {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ComparableCircle c1 = new ComparableCircle();
        ComparableCircle c2 = new ComparableCircle();
        c1.setRadius(sc.nextDouble());
        c2.setRadius(sc.nextDouble());
        System.out.println(c1.compareto(c2));
    }
}

思考:參照上述做法定義矩形類Rectangle和ComparableRectangle類,在ComparableRectangle類中給出compareTo方法的實(shí)現(xiàn),比較兩個(gè)矩形的面積大小。

總結(jié)

到此這篇關(guān)于Java中接口的文章就介紹到這了,更多相關(guān)Java接口詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot上傳文件并返回url過(guò)程

    springboot上傳文件并返回url過(guò)程

    這篇文章主要介紹了springboot上傳文件并返回url過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java中DateUtils時(shí)間工具類詳解

    java中DateUtils時(shí)間工具類詳解

    這篇文章主要為大家詳細(xì)介紹了java中DateUtils時(shí)間工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 基于java實(shí)現(xiàn)websocket協(xié)議過(guò)程詳解

    基于java實(shí)現(xiàn)websocket協(xié)議過(guò)程詳解

    這篇文章主要介紹了基于java實(shí)現(xiàn)websocket協(xié)議過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • MyBatis深入解讀動(dòng)態(tài)SQL的實(shí)現(xiàn)

    MyBatis深入解讀動(dòng)態(tài)SQL的實(shí)現(xiàn)

    動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一。如果你使用過(guò) JDBC 或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接 SQL 語(yǔ)句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài) SQL,可以徹底擺脫這種痛苦
    2022-04-04
  • Java數(shù)組的初始化方法詳解

    Java數(shù)組的初始化方法詳解

    在Java程序開(kāi)發(fā)中,數(shù)組是一個(gè)非常常用的數(shù)據(jù)類型,數(shù)組的初始化是使用數(shù)組來(lái)存儲(chǔ)和處理數(shù)據(jù)的關(guān)鍵步驟之一,但是,關(guān)于Java數(shù)組的初始化,經(jīng)常會(huì)讓人感到迷惑,本文將詳細(xì)介紹Java數(shù)組的初始化方法,幫助讀者從此告別關(guān)于Java數(shù)組初始化的困惑
    2023-11-11
  • 兩種Spring服務(wù)關(guān)閉時(shí)對(duì)象銷(xiāo)毀的實(shí)現(xiàn)方法

    兩種Spring服務(wù)關(guān)閉時(shí)對(duì)象銷(xiāo)毀的實(shí)現(xiàn)方法

    spring提供了兩種方式用于實(shí)現(xiàn)對(duì)象銷(xiāo)毀時(shí)去執(zhí)行的操作,本文主要為大家詳細(xì)介紹了這兩種方式的具體實(shí)現(xiàn),文中的示例代碼講解詳細(xì),希望對(duì)大家有所幫助
    2023-04-04
  • 使用Log4j2代碼方式配置實(shí)現(xiàn)線程級(jí)動(dòng)態(tài)控制

    使用Log4j2代碼方式配置實(shí)現(xiàn)線程級(jí)動(dòng)態(tài)控制

    這篇文章主要介紹了使用Log4j2代碼方式配置實(shí)現(xiàn)線程級(jí)動(dòng)態(tài)控制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 解析JavaSE的繼承和多態(tài)

    解析JavaSE的繼承和多態(tài)

    這篇文章主要為大家詳細(xì)介紹了JavaSE的繼承和多態(tài),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Java BigDecimal類用法詳解

    Java BigDecimal類用法詳解

    BigDecimal 由任意精度的整數(shù)非標(biāo)度值 和32 位的整數(shù)標(biāo)度 (scale) 組成。如果為零或正數(shù),則標(biāo)度是小數(shù)點(diǎn)后的位數(shù)。如果為負(fù)數(shù),則將該數(shù)的非標(biāo)度值乘以 10 的負(fù)scale 次冪。
    2016-06-06
  • MyBatis sql中test如何判斷Boolean

    MyBatis sql中test如何判斷Boolean

    這篇文章主要介紹了MyBatis sql中test如何判斷Boolean,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評(píng)論

邵东县| 定西市| 乐业县| 江油市| 芜湖市| 平昌县| 临西县| 乾安县| 大冶市| 东莞市| 昆明市| 隆子县| 滁州市| 同德县| 阳曲县| 泽州县| 教育| 柳河县| 太仆寺旗| 大埔县| 纳雍县| 许昌市| 嫩江县| 兴城市| 阿克| 玉田县| 尼玛县| 昭觉县| 利辛县| 林州市| 乌拉特前旗| 应用必备| 保山市| 淮北市| 巴楚县| 丽江市| 无为县| 彭州市| 晋州市| 长丰县| 韶关市|