java接口定義和作用


接口語法

1.接口是一種引用類型,可以等同看作類。修飾符 interface 接口名
2.接口中只能出現常量和抽象方法
3.接口其實是一個特殊的抽象類,特殊在接口是完全抽象的
4.接口中沒有構造方法,接口也無法實例化
5.接口和接口之間可以多繼承
6.一個類可以實現多個接口,這里的實現等同於繼承
7.一個非抽象的類實現接口,需要將接口中所有方法實現/重寫/覆蓋

#java
package study1;

public interface A{
    //常量都是public static final,可省略
    public static final String sucess = "SUCCESS";
    public static final double pi = 3.14;
    byte max_value = 127;
    //接口中所有的抽象方法都是public abstract,
    public abstract void m1();
    //接口方法不能有方法體,如 void m22(){};會提示interface abstract methods cannot have body
    
    void m2();

    interface B{
        void m1();
    }
    interface C{
        void m2();
    }
    interface D{
        void m3();
    }
    interface E extends B,C,D{
        void m4();
    }
    /*
    extends只能單繼承,implements可以多繼承
    如果實現的接口有多個方法,必須覆蓋接口中的方法。
    */
    class MyClass implements B,C{
        public void m2(){}
        public void m1(){}
    }
    class MyClass2 implements E{
        
        public void m1(){};
        public void m2(){};
        public void m3(){};
        public void m4(){};
    }
}



接口的作用

#java
package date818;

/**
 * 接口的作用:
 * 1。可以使項目分離,所有層都面向接口開發,提高開發效率
 * 2。接口是代碼和代碼之間的耦合度降低。變得可插拔,可以隨意切換。
*  3。接口和抽象類都能完成某個功能,優先選擇接口,因為接口可以多實現,多繼承。並且一個類除了接口之外,還可以繼承其他類
 */
public interface CustomerService {
    //定義一個推出系統的方法
    void logout();
}

package date818;
//接口實現類1
public class CustomerServierImpl implements CustomerService {
    public void logout(){
        System.out.println("成功退出系統");
    }
}

package date818;
//接口實現類2
public class CustomerServiceImpl2 implements CustomerService{
    public void logout(){
        System.out.println("hello world");
    }
}

package date818;

public class TestCustomer {
    public static void main(String[] args){
        //需要執行CustomerServiceImpl和CustomerImpl2接口實現類中的logout方法
        //以下程序面向接口調用
        CustomerService cs = new CustomerServierImpl();//多態。父類型引用指向子類型對象
        //調用
        cs.logout();
        CustomerService cs2 = new CustomerServiceImpl2();
        cs2.logout();
    }
}

#java
//定義接口
package date818;

public interface Engine {
    //所有發動機都可以通過這個接口啟動
    void start();
}
//定義實現接口的類
package date818;

public class Honda implements Engine{
    public void start(){
        System.out.println("本田啟動");
    }
}
package date818;

public class Ymaha implements Engine{
    public void start(){
        System.out.println("雅馬哈啟動");
    }
}
//定義生產汽車的類
package date818;

public class Car {
    //面向接口編程,不能將類實例化
    /**
     * 引用接口定義一個屬性e,相當於
     * String name;
     * Integer age;
     * 類里定義的變量是成員變量;方法里定義的變量是局部變量。
     */
    Engine e ;//成員變量e

    Car(Engine e){
        //定義構造方法,把局部變量e賦值給成員變量
        this.e=e;
    }
    //對外提供的測試方法
    public void testEngine(){
        //成員變量e
        e.start();
    }
}
//定義測試類
package date818;

public class TestCar {
    public static void main(String[] args){
        //生產引擎
        Engine e = new Ymaha();
        //根據構造方法傳入參數生產汽車
        Car c = new Car(e);
        //測試引擎
        c.testEngine();

        c.e = new Honda();//已經定義了一個實例,直接對實例的參數修改即可
        c.testEngine();
    }
}

雅馬哈啟動
本田啟動


免責聲明!

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



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