中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何深入理解Java中的接口

發布時間:2021-11-29 09:14:57 來源:億速云 閱讀:154 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關如何深入理解Java中的接口,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

    一、前言

    前面我們說了抽象類的概述,我們對抽象類也有個認識和理解了,現在我們學習十分重要的內容接口,接口這個詞比較的抽象,但其實也是十分好理解的。

    二、接口

    簡單的說,接口就是一種被規范的標準,只要符合這個標準都可以通用,接口的表現在于對行為的抽象。 就好比插座,每個廠商生產的插座我們都可以用,這是因為他們有同一個標準,這里插座就是接口。

    接口的格式

    格式1:

    public interface 接口名

    格式2:

    interface  接口名

    三、接口的特點

    ①多態的實例化用implement關鍵字

    public  interface usb{}//定義一個接口
     
    public  class  computer implements  usb{}//創建一個類實現接口

    ②接口不能被直接實例化,可以通過多態的形式實現實例化

    usb  u =new computer();

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

    常量默認被public  static final

    方法默認被public static   abstractl修飾

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

    直接int num=10,創建的a是常量

    ④多態的前提:

    有繼承或實現關系

    有方法的重寫,

    有父類或父接口引用指向子類或實現類對象

    ⑤接口的實現類

    必須重寫接口中的所有方法,不想重寫則可以是抽象類(加上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();
        }
    }

    四、類與接口的關系

    類和類之間是繼承關系

    接口和接口之間是繼承關系

    類和接口之間是實現關系(類實現接口)

    類只支持單繼承(即一個子類只有一個父類),可以實現多個類

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

    接口之間可以多重繼承。

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

    接口多重繼承的好處

    定義了許多接口,如果一個設備要同時實現那么多接口將是不小的開銷,對于同能

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

    使用類只要實現一個就可以了。

    接口1

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

    接口2

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

    接口3

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

    總接口:用來繼承上面三個接口

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

    此時原來的類實現只要實現一個總接口即可

    舊:

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

    新:

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

    在controller中調用也是簡單不少

    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();
     
        }
    }

    如何深入理解Java中的接口

    練習

    定義一個接口用來實現兩個對象的比較。

    package cn.com.Classwork190124;
    
    public interface CompareObject<object> {
        public int compareto(object o);
        //若返回值是 0 , 代表相等; 若為正數,代表當前對象大;負數代表當前對象小
    }

    定義一個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;
        }
    }

    定義一個ComparableCircle類,繼承Circle類并且實現CompareObject接口。在ComparableCircle類中給出接口中方法compareTo的實現體,用來比較兩個圓的半徑大小。

    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;
            }
        }
    }

    定義一個測試類TestInterface,創建兩個ComaparableCircle對象,調用compareTo方法比較兩個類的半徑大小。

    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方法的實現,比較兩個矩形的面積大小。

    看完上述內容,你們對如何深入理解Java中的接口有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    波密县| 嘉义县| 青阳县| 汝南县| 灵川县| 永善县| 南岸区| 增城市| 平遥县| 奎屯市| 平潭县| 陆良县| 盐城市| 岚皋县| 开封市| 疏勒县| 宜宾市| 沽源县| 林甸县| 建瓯市| 旌德县| 沅江市| 琼结县| 彝良县| 盐边县| 剑阁县| 巴东县| 涟水县| 万全县| 金阳县| 集安市| 合阳县| 长乐市| 维西| 黎川县| 德惠市| 麻江县| 揭西县| 瓦房店市| 龙南县| 景东|