介面

  • 普通類:只有具體實現
  • 抽象類:具體實現和規範(抽象方法)都有
  • 介面:只有規範!約束和實現分離
  • 介面就是規範,定義的是一組規則,體現了現實世界中“如果你是…則必須能…”的思想。如果你是天使,則必須能飛。如果你是汽車,則必須能跑。如果你是好人,則必須幹掉壞人。
  • 介面的本質是契約,就像我們人間的法律一樣。制定好後大家都遵守。
  • 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可以實現多個介面