欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中接口的深入詳解

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

一、前言

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

二、接口

簡單的說,接口就是一種被規(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í)例化,可以通過多態(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è)正確的寫法等價(jià)
public  abstract  void method1();√
void  method2();√

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

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

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

有方法的重寫,

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

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

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

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

⑥接口只能被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)那么多接口將是不小的開銷,對(duì)于同能

同類的可以把他用一個(gè)接口繼承起來,這樣這個(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();
}

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

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

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

舊:

public class CatImpl implements EatService,PlayService,SleepService {
//方法重寫
}

新:

public class CatImpl implements SumService {
//方法重寫
}

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

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è)接口用來實(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)體,用來比較兩個(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è)測試類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)文章

  • Spring聲明式事務(wù)注解之@EnableTransactionManagement解析

    Spring聲明式事務(wù)注解之@EnableTransactionManagement解析

    這篇文章主要介紹了Spring聲明式事務(wù)注解之@EnableTransactionManagement解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 一次線上websocket返回400問題排查的實(shí)戰(zhàn)記錄

    一次線上websocket返回400問題排查的實(shí)戰(zhàn)記錄

    最近項(xiàng)目中有端對(duì)端通信場景,實(shí)時(shí)性要求較高,考慮后選用了websocket 這一通信協(xié)議,下面這篇文章主要給大家介紹了一次線上websocket返回400問題排查的實(shí)戰(zhàn)記錄,需要的朋友可以參考下
    2022-04-04
  • java格式化時(shí)間示例

    java格式化時(shí)間示例

    這篇文章主要介紹了java格式化時(shí)間示例,需要的朋友可以參考下
    2014-04-04
  • Java使用Servlet生成驗(yàn)證碼圖片

    Java使用Servlet生成驗(yàn)證碼圖片

    這篇文章主要為大家詳細(xì)介紹了Java使用Servlet生成驗(yàn)證碼圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java基于直方圖應(yīng)用的相似圖片識(shí)別實(shí)例

    Java基于直方圖應(yīng)用的相似圖片識(shí)別實(shí)例

    這篇文章主要介紹了Java基于直方圖應(yīng)用的相似圖片識(shí)別實(shí)例,是非常實(shí)用的技巧,多見于圖形里游戲中,需要的朋友可以參考下
    2014-09-09
  • Spinrg WebFlux中Cookie的讀寫的示例

    Spinrg WebFlux中Cookie的讀寫的示例

    這篇文章主要介紹了Spinrg WebFlux中Cookie的讀寫的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java中Request請(qǐng)求轉(zhuǎn)發(fā)詳解

    Java中Request請(qǐng)求轉(zhuǎn)發(fā)詳解

    這篇文章主要介紹了Java中Request請(qǐng)求轉(zhuǎn)發(fā)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解Junit 測試之 Spring Test

    詳解Junit 測試之 Spring Test

    本篇文章主要介紹了Junit 測試之 Spring Test,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Mybatis?如何開啟控制臺(tái)打印sql語句

    Mybatis?如何開啟控制臺(tái)打印sql語句

    這篇文章主要介紹了Mybatis?如何開啟控制臺(tái)打印sql語句問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java圖片轉(zhuǎn)字符圖片的生成方法

    Java圖片轉(zhuǎn)字符圖片的生成方法

    本文主要實(shí)現(xiàn)了將一張圖片轉(zhuǎn)成字符圖片,同樣可以遍歷每個(gè)像素點(diǎn),然后將像素點(diǎn)由具體的字符來替換,從而實(shí)現(xiàn)字符化處理,感興趣的可以了解一下
    2021-11-11

最新評(píng)論