從向上向下轉型到----抽象類接口(二)

接口
接口:若是一個類只是由抽象方法和全局常量組成,這種狀況不會定義爲一個抽象類,而是將其定義爲接口.同時接口打破了抽象類子類的一個很大的問題---單繼承侷限.在java中,能夠使用interface來定義.如:java

interface A{
public static final String MSG="YOOTK";
public abstract void print();
}

接口也必須有子類,一個子類能夠使用implement關鍵字實現多個接口,避免單繼承的侷限.接口的子類,必須複寫接口中的所有抽象方法.接口的對象能夠利用子類對象的向上轉型進行實例化操做.設計模式

 

接口的實際應用-----標準app

什麼是標準呢?舉個例子,一個計算機定義了USB接口標準,那麼使用這個USB的諸如U盤,MP3等不少設備才能根據這個接口去設計.工具

interface USB{
public void start(); //定義一個USB接口,有開始和中止兩個功能
public void stop();
}
class Computer{
public void plugin(USB usb){ //定義一個計算機類調用這兩個方法
usb.start;
usb.stop;
}
}
class Flash implements USB{
public void start(){
System.out.print(){
System.out.println("U盤開始使用")
}
....
}
}
class Print implements USB{
public void start(){
System.out.print(){
System.out.println("打印機開始使用")
} 
....
}
}
public class Demo{
public static void main(String args[]){
Computer com = new Computer; //實例化計算機
com.plugin(new Flash());    //插入USB接口
com.plugin(new Print());    //插入USB接口
}
}

 

接口的應用----工廠設計模式
讓客戶端只看見接口而不讓看見子類,但須要一箇中間的工具類來取得接口對象.而咱們能夠經過工廠類取得接口對象ui

class Factory{
public static Fruit getInstance(String className){
if("apple".equals(className)){
return new Apple();
}else if("orange".equals(className)){
return new Orange();
}else{
return null;
}
}
}

public class Demo{
public static void main(String args[]){
Fruit f = Factory.getInstance("orange");
f.eat;
}
}

 

接口的好處顯而易見,避免了單繼承的侷限spa

相關文章
相關標籤/搜索