為什麼使用介面? 問題 要求實現防盜門的功能 分析 門有開和關的功能,鎖有上鎖和開鎖的功能 將門和鎖分別定義為抽獎類 那麼問題就是防盜門即繼承了門的同時又繼承了鎖,而Java的繼承是單繼承,介面可多繼承。 解決 將門定義為抽獎類,鎖定義為介面 防盜門繼承門,實現鎖的介面 解決了多繼承 什麼是介面? ...
為什麼使用介面?
問題
要求實現防盜門的功能
分析
- 門有開和關的功能,鎖有上鎖和開鎖的功能
- 將門和鎖分別定義為抽獎類
那麼問題就是防盜門即繼承了門的同時又繼承了鎖,而Java的繼承是單繼承,介面可多繼承。
解決
- 將門定義為抽獎類,鎖定義為介面
- 防盜門繼承門,實現鎖的介面
- 解決了多繼承,更好的使用多態
什麼是介面?
Java介面是一系列方法的聲明,是一些方法特征的集合,一個介面只有方法的特征沒有方法的實現
因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
如何使用介面?
[ public ] interface 介面名 [ extends 超介面表 ] { 介面體 }
介面是一種只由常量定義和抽象方法組成的特殊類。
介面體中的內容是一系列常量的定義和方法的定義,不提供方法的實現(即沒有方法體),用分號結尾。
介面的所有變數都預設是final static屬性,所有的方法都是public adstract屬性。
如果一個類要實現某個介面,必須實現介面的所有方法。
面向介面編程
- 定義Door抽象類:具有開門,關門的功能
- 定義Lock介面:具備上鎖,開鎖的能力
- 編寫TheftproofDoor類:繼承類實現介面
- 編寫測試類:讓防盜門關門,上鎖,開鎖,開門
package javaTest4;
//抽象類 門
abstract class Door{
public abstract void open();
public abstract void close();
}
//介面:鎖
interface Lock{
int i=1; //都是靜態常量
public void lock(); //都是抽象方法
public void unlock();
}
//介面 照相機
interface Crama{
public void takePhotos();
}
//防盜門類
class FDoor extends Door implements Lock,Crama{
@Override
public void open() {
System.out.println("開門");
}
@Override
public void close() {
System.out.println("關門");
}
@Override
public void lock() {
System.out.println("上鎖");
}
@Override
public void unlock() {
System.out.println("開鎖");
}
@Override
public void takePhotos() {
System.out.println("開門時,拍照");
}
}
public class test5 {
public static void main(String[] args) {
FDoor fd=new FDoor();
fd.close();
fd.lock();
fd.unlock();
fd.open();
fd.takePhotos();
}
}
必須知道的介面特性
- 介面不可以被實例化,常作為類型使用
- 介面是一種特殊的抽象類
- 實現類必須實現介面的所有方法
- 實現類可以實現多個介面(Java中的多繼承)
- 介面中的變數都是靜態常量
- 介面預設是public