Java面向對象系列(14)- 接口的定義與實現

接口

 

  • 普通類:只有具體實現
  • 抽象類:具體實現和規範(抽象方法)都有
  • 接口:只有規範!約束和實現分離

 

  • 接口就是規範,定義的是一組規則,體現了現實世界中「如果你是…則必須能…」的思想。如果你是天使,則必須能飛。如果你是汽車,則必須能跑。如果你是好人,則必須幹掉壞人。
  • 接口的本質是契約,就像我們人間的法律一樣。制定好後大家都遵守。
  • OO的精髓,是對對象的抽象,最能體現這一點的就是接口。為什麼我們討論設計模式都只針對具備了抽象能力的語言(比如c++、java、c#等),就是因為設計模式所研究的,實際上就是如何合理的去抽象

 

  • 聲明類的關鍵字是class,聲明接口的關鍵字是interface

接口一

package oop.demo09;

//interface 接口
public interface UserService {

    //常量:接口中定義的參數都是常量:public static final
    public static final int age = 99;
    //只保留常量類型,常量名和值即可
    double score = 99.5;

    //接口中所有的方法定義都是抽象的即 public abstract
    public abstract void go();
    //public abstract直接去掉,方法保留返回類型和方法名,以及參數(如果有的話)
    void run(String name);
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}

接口二

package oop.demo09;

public interface TimeService {
    void time();
}

實現接口的類

package oop.demo09;

//實現接口的類命名,一般命名為接口+Imp,即UserServiceImp
//通過implments關鍵字來繼承(實現)接口的類
//實現接口的類,需要重寫接口中的方法

//利用接口實現多繼承
public class UserServiceImp implements UserService,TimeService {
    @Override
    public void go() {

    }

    @Override
    public void run(String name) {

    }

    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void time() {

    }
}

總結

  • 接口就是一個約束,定義了一些方法,讓不同的人去實現它
  • 定義接口類使用關鍵字interface
    • 接口類不能被實例化,接口中沒有構造方法,只有方法名,構造方法有繼承(實現)接口的類去實現
    • 接口類中方法的定義都是抽象的,即public abstratc。只需要保留方法的返回類型+方法名+(參數)
    • 接口類中定義的參數都是常量,即public static final。只需要保留常量的類型+常量名+常量值
  • 繼承(實現)接口類使用關鍵字implements,繼承多個接口用逗號分隔
    • 繼承(實現)接口類,必須重寫接口中的方法
    • implements可以實現多個接口