Java 接口(interface)

Java 接口(interface)

實現格式:class 類名 implements 接口名,…{}

  • 特點

    • 接口不能被實例化

    • 一個類如果實現了接口,要麼是抽象類,要麼實現接口中所有的抽象方法。

    • 接口成員的特點

    • 接口中成員修飾符是固定的

    • public static final ,接口中定義變量是成員變量,而且修飾符只能是這三個關鍵字,都可以省略,編譯時會自動添加,常量名要大寫。

    • public abstract,接口中定義的方法都是抽象的,兩個關鍵字都可以省略,編譯時會自動添加。

    • 建議手動給出修飾符

  • 繼承與實現的區別

    • 類與類之間稱爲繼承關係,因爲該類無論是抽象的還是非抽象的,它的內部都可以定義非抽象方法,這個方法可以直接被子類使用,子類繼承即可。只能單繼承,可以多層繼承。

    • 類與接口之間是實現關係,因爲接口中的方法都是抽象方法,必須由子類實現纔可以實例化。可以單實現,也可以多實現。還可以在繼承一個類的同時實現多個接口

    • 接口與接口之間是繼承關係,一個可以繼承另一個接口,並添加新的屬性和抽象方法,並且可以多繼承。

  • 抽象類和接口的區別

    • 成員變量
      • 抽象類可以有變量也可以有常量
      • 接口只能有常量
    • 成員方法
      • 抽象類可以有抽象方法,也可以有非抽象方法
      • 接口只能有抽象方法
    • 構造方法
      • 抽象類有構造方法
      • 接口沒有構造方法
  • 接口的思想特點

    1. 接口是對外暴露的規則
    2. 接口是程序的功能擴展
    3. 接口的出現降低了耦合性(實現了模塊化開發,定義好規則,每個人實現自己的模塊,大大提高了開發效率)
    4. 接口可以用來多實現
    5. 多個無關的類可以實現同一個接口
    6. 一個類可以實現多個相互沒有關係的接口
    7. 與繼承關係相似,接口與實現類存在多態性
  • 示例

    class Demo2 {
        public static void main(String[] args) {
            //籃球運動員
            BasketballPlayer bp = new BasketballPlayer();
            bp.setName("郭艾倫");
            bp.setAge(33);
    
            bp.eat();
            bp.sleep();
            bp.study();
            bp.speak();
            bp.aboard();
            //籃球教練
    
            System.out.println("---------------------------------");
            BasketballCoach bc = new BasketballCoach();
            bc.setName("波波維奇");
            bc.setAge(65);
            bc.eat();
            bc.sleep();
            bc.speak();
            bc.teach();
            bc.aboard();
            //多態
    
            System.out.println("---------------------------------");
            Person p = new BasketballPlayer();
            p.setName("Kobe Bryant");
            p.setAge(33);
            p.eat();
            p.sleep();
    
    
            System.out.println("---------------------------------");
            BasketballPlayer bp2 = (BasketballPlayer)p;
            bp2.study();
            bp2.speak();
            bp2.aboard();
        }
    }
    
    interface SpeakEnglish {
        public abstract void speak();
    }
    
    interface GoAboard {
        public abstract void aboard();
    }
    
    abstract class Person {
        private String name;
        private int age;
    
        public Person(){}
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
        public int getAge() {
            return this.age;
        }
    
        public abstract void eat();
    
        public void sleep() {
            System.out.println("Zzz");
        }
    
    }
    
    abstract class Player extends Person {
        public abstract void study();
    }
    
    abstract class Coach extends Person {
        public abstract void teach();
    }
    
    //籃球運動員
    class BasketballPlayer extends Player implements SpeakEnglish, GoAboard {
        public void eat() {
            System.out.println(getAge() + "歲的" + getName() + "喫雞腿");
        }
    
        public void study() {
            System.out.println(getAge() + "歲的" + getName() + "學扣籃");
        }
    
        public void speak() {
            System.out.println(getAge() + "歲的" + getName() + "HelloWorld");
        }
        public void aboard() {
            System.out.println(getAge() + "歲的" + getName() + "GoAboard");
        }
    }
    
    //乒乓球運動員
    class PingPangPlayer extends Player {
        public void eat() {
            System.out.println(getAge() + "歲的" + getName() + "喫雞蛋");
        }
    
        public void study() {
            System.out.println(getAge() + "歲的" + getName() + "學扣球");
        }
    }
    
    //籃球教練
    class BasketballCoach extends Coach implements SpeakEnglish, GoAboard {
        public void eat() {
            System.out.println(getAge() + "歲的" + getName() + "啃雞爪");
        }
        public void teach() {
            System.out.println(getAge() + "歲的" + getName() + "教扣籃");
        }
        public void speak() {
            System.out.println("Say Hello Java");
        }
        public void aboard() {
            System.out.println(getAge() + "歲的" + getName() + "GoAboard");
        }
    }
    
    //乒乓球教練
    class PingPangCoach extends Coach {
        public void eat() {
            System.out.println(getAge() + "歲的" + getName() + "喫雞蛋皮");
        }
    
        public void teach() {
            System.out.println(getAge() + "歲的" + getName() + "教扣球");
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章