iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Software Development

Java基礎筆記系列 第 18

Java的介面Interface

  • 分享至 

  • xImage
  •  

Java的「介面」可以定義不同類別之間一樣的方法行為,例如飛機跟老鷹都有「飛行」行為,但他們不屬於同一類別,此時就能透過「介面」來定義「飛行」行為。

介面主要功能

  • 多重繼承:Java只能單一繼承,但介面可以多重繼承。
    class Bird extends Animal implements Flyable, Singable{...}
    class Person implements Eater, Sleeper {...}

  • 定義規格:介面亦為一種類別,其所有方法皆為抽象方法,子類別需實作介面所有抽象方法;而介面之間可以再繼承。
    interface Eater { void eat(); }

  • 空介面:沒有定義任何方法的介面,作為標記作用。其中有名的兩個空介面:

    //Clonealbe物件複製,說明該類別物件可已使用clone方法複製
    class MyClass implements Cloneable{
    ...
    }
    
    //Serializable物件序列化,說明該類別物件可被轉換為位元組序列化
    class MyClass implements Serializable{
    ...
    }
    
  • 型別轉換:繼承原本是將類別視為is a關係,但介面是轉換成「有共同行為」的關係。

    interface Flyable{
      void fly();
    }
    class Bird implements Flyable{
      public void fly(){
          System.out.println("Brind is flying");
      }
    }
    
    public static void main(String[] args){
      Flyable f1 = new Bird();
    }
    //Bird實作Flyable介面,因此可將Bird實例賦值給Flyable型別變數
    
  • 降低相依性:某類別實作某介面,只需知道介面方法,降低彼此不同的程式碼相依性。

      //定義Sound介面:發聲方法
      public interface Sound { 
          void makeSound();
      }
      //定義Animal抽象類別,實作Sound介面
      public abstract class Animal implements Sound{ 
          public void makeSound(){
              System.out.println("Animal makes a sound.");
          }
      }
      //建立動物子類別,因父類別實作Sound介面,故都可使用此方法
      public class Dog extends Animal{
      ...
      }
      public class Cat extends Animal{
      ...
      }
      //另創建Zoo,要讓動物類別發出聲音,使用介面
      public class Zoo{
          public void makeNoise(Sound animal){ //Sound介面亦為類別
              animal.makeSound();
          }
      }
      //Main方法使用
      public class Main{
          public static void main(String[] args){
              Zoo zoo = new Zoo();
              Dog dog = new Dog();
              Cat cat = new Cat();
              Zoo.makeNoise(dog); 
              Zoo.makeNoise(cat);
          }
      }
    

介面規範

  • 介面的變數,預設強制為常數,並且要宣告初始值。
    public static final(會省略)
    相當於規格固定標準。
  • 介面的方法,預設強制為抽象方法。
    public abstract(會省略)
    使用方法各自表述。

上一篇
Java的抽象Abstract
下一篇
Java的包裝Wrapper類別:裝拆箱機制
系列文
Java基礎筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言