Java面向對象之 接口: [修飾符] interface 接口名 {...};子接口:[修飾符] interface 接口名 extends 父接口,父接口2...{...}


1、什么是接口?

類比抽象類,把功能或者特性類似的一類 抽象的更徹底,可以提煉出更加特殊的“抽象類”----接口

 

2、如何定義接口

語法:

 [修飾符] interface 接口名 {

  N個常量定義...

  N個抽象方法定義...

  N個內部類、接口、枚舉定義....

  N個私有方法,默認方法或者類方法定義

}

修飾符一般為public 即可以跨包訪問,絕大多數情況接口都是需要跨包訪問的

 3、接口特性注意:

  1. 接口修飾符public可以省略,省略后不能在包外訪問,所以99%+ 實際應用中都是需要public

  2. 不支持變量定義,定義出來的變量都是常量。也就是說默認都是被隱藏的static、final修飾的類變量

    如下兩行代碼效果一樣

    int maxNum = 10;
    public static final int maxNum = 10;
  3. 接口中定義的方法,認都是public (公開)、abstract  (抽象) 的。必須被類實現,

  4. java9接口中還可以定義默認方法。當實現類中沒有重寫方法的話,調用的就是這個默認方法。

  5. java9接口中還可以使用private的方法。這些private 的方法就是給默認方法充當工具方法的。

示例:圖形接口

package com.zmd.study.interface_example;

/**
 * @ClassName Shape
 * @projectName: object1
 * @author: Zhangmingda
 * @description: 定義一個形狀接口,用於三角形或其它圖形類實現功能,或者子接口繼承
 * date: 2021/3/30.
 */
public interface Shape {
    /**
     * 接口中定義的變量 默認為常量:自動被public static final 修飾
     * 如下mxNum變量的定義等於:public static final int maxNum = 10;
     */
    int maxNum = 10;
    //public static final int maxNum = 10;
    /**
     * 獲取平面圖形的類型
     */
    public abstract String getType();

    /**
     * 獲取平面圖形的周長
     */
    public abstract double getPerimeter();
}

三角形類實現接口

package com.zmd.study.interface_example;

/**
 * @ClassName Triangle
 * @projectName: object1
 * @author: Zhangmingda
 * @description: 類實現了接口功能,使用implements關鍵字
 * date: 2021/3/30.
 */
public class Triangle implements Shape {
    /**
     * 三角形的三邊長類型定義
     */
    private double a;
    private double b;
    private double c;

    /**
     * 構造方法,創建三角形實例必須提供三邊長度
     */
    public Triangle(double a, double b, double c) {
        /**
         *@params [a, b, c] 三角形三邊長度
         *@return null
         *@創建時間 2021/3/30
         */
        if(a+b < c || a+c < b || b+c < a){
            System.out.println("Failed!:三角形的兩邊之和必須大於第三邊");
            return;
        }
        this.a = a;
        this.b = b;
        this.c = c;
    }

    @Override
    public String getType() {
        if(a+b < c || a+c < b || b+c < a){return "未知圖形";}
        return "三角形";
    }

    @Override
    public double getPerimeter() {
        return a + b + c;
    }

}

測試運行

package com.zmd.study.interface_example;

/**
 * @ClassName InterfaceTest
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/3/30.
 */
public class InterfaceTest { public static void main(String[] args) {  Shape triangle = new Triangle(3,4,5); System.out.println(triangle.getType()); System.out.println(triangle.getPerimeter()); } } /**
輸出:
三角形
12.0
*/

4、接口的默認方法 default 修飾 (java 9新特性)

實現類中沒有重寫方法的話,調用的就是這個默認方法。

如上Shape.java中 增加default修飾的方法

package com.zmd.study.interface_example;

/**
 * @ClassName Shape
 * @projectName: object1
 * @author: Zhangmingda
 * @description: 定義一個形狀接口,用於三角形或其它圖形類實現功能,或者子接口繼承
 * date: 2021/3/30.
 */
public interface Shape {
    ...同上省略
/** * 定義一個默認方法;如果實現接口的類沒有寫這個方法,也可以使用 */ default public void printMe(){ System.out.println("我是:" + getType() + "我的周長是:" + getPerimeter()); } }

三角形類同上:Triangle.java

測試類實例化三角形Triangle()調用printMe()方法

public class InterfaceTest {
    public static void main(String[] args) {
        Shape triangle = new Triangle(3,4,5);
        System.out.println(triangle.getType());
        System.out.println(triangle.getPerimeter());
        triangle.printMe();
    }
}
/**
三角形
12.0
我是:三角形我的周長是:12.0
/*

5、接口中的private的方法(java9新特性)

作用:完全是給default 默認方法充當工具方法,當有多個default方法有共同的代碼的時候,可以單獨列出來。

package com.zmd.study.interface_example;

/**
 * @ClassName Shape
 * @projectName: object1
 * @author: Zhangmingda
 * @description: 定義一個形狀接口,用於三角形或其它圖形類實現功能,或者子接口繼承
 * date: 2021/3/30.
 */
public interface Shape {
    ...省略如上代碼...

    /**
     * 定義一個默認方法;如果實現接口的類沒有寫這個方法,也可以使用
     */
    default public void printMe(){
        beforPrintMe();
        System.out.println("我是:" + getType() + "我的周長是:" + getPerimeter());
        
    }
    /**
     * java9 特性:接口可以用private 私有的方法,給default方法充當工具方法
     */
    private void beforPrintMe(){
        System.out.println("beforPrintMe()....干了一些活");
    }
}

三角形類同上:Triangle.java

測試類實例化三角形Triangle()調用printMe()方法

package com.zmd.study.interface_example;

/**
 * @ClassName InterfaceTest
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/3/30.
 */
public class InterfaceTest {
    public static void main(String[] args) {
        Shape triangle = new Triangle(3,4,5);
        System.out.println(triangle.getType());
        System.out.println(triangle.getPerimeter());
        triangle.printMe();
    }
}
/**
三角形
12.0
beforPrintMe()....干了一些活
我是:三角形我的周長是:12.0
*/

 

 

6、子接口定義(接口的繼承)

語法:

 [修飾符] interface 接口名 extends 父接口,父接口2...{

  ....同上

}

示例:

動物接口、人接口、女人接口;女人接口繼承動物和人。wife 類實現女人接口。wife類就具有如上接口的default方法

動物接口

package com.zmd.study.interface_example;

public interface Animal {
    default void yell(){
        System.out.println("動物 啊....叫喊!!!");
    }
}

人接口

package com.zmd.study.interface_example;

public interface Person {
    default void makeLove(){
        System.out.println("Person makeLove 啊!...哦...啊...");
    }
}

女人接口

package com.zmd.study.interface_example;

public interface Woman extends Animal, Person{
}

wife類

package com.zmd.study.interface_example;
public class Wife implements Woman {
}

測試類

package com.zmd.study.interface_example;

public class InterfaceTest {
    public static void main(String[] args) {
        Wife wife = new Wife();
        wife.yell();
        wife.makeLove();
    }
}
/**
動物 啊....叫喊!!!
Person makeLove 啊!...哦...啊...
*/

7、一個類實現多個接口

用一個學生類實現6中的Animal、Person接口。並增加自己的功能

學生類Student.java

package com.zmd.study.interface_example;

public class Student implements Animal,Person  {
    public void study(){
        System.out.println("學習");
    }
}

測試類

package com.zmd.study.interface_example;

/**
 * @ClassName InterfaceTest
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/3/30.
 */
public class InterfaceTest {
    public static void main(String[] args) {
        Student student = new Student();
        student.study();
        student.yell();
        student.makeLove();

    }
}

/**
學習
動物 啊....叫喊!!!
Person makeLove 啊!...哦...啊...
*/

 

 

 

 

 

 

 

 

 

 

 

 

其他類似案例場景

接口實現業務邏輯課插拔,更換數據庫直接改配置文件即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM