1. 程式人生 > >Java基礎——面向物件(四)介面

Java基礎——面向物件(四)介面

一、定義

為了引入介面概念,可以這麼理解:當為個抽象類中的方法都是抽象的時候,這時可將該抽象類用另一種形式定義和表示,就是 介面 interface。

定義介面使用的關鍵字不是class,而是interface————類似於class這麼一種關鍵字,尤其編譯完還是class字尾。

對於介面當中常見的成員:而且這些成員都有固定的修飾符

1.全域性常量:public static final

2.抽象方法。public abstract

interface IDemo
{
    public static final int NUM = 4;
    public abstract void show1();
    public abstract void show2();
}
//可以簡寫做:但一般不這麼做
interface IDemo
{
    int NUM = 4;
    void show1();
    void show2();
}

二、實現

類與類之間是繼承關係,類與介面之間是是實現關係。

class DemoImpl implements IDemo
{
    
}

介面不能被例項化。只能由實現了介面的子類並覆蓋了介面中所有的抽象方法後,該子類才可以例項化。否則,這個子類就是一個抽象類。

三、多實現

1.Java中不直接支援多繼承,因為會出現呼叫的不確定性。所以Java中將多繼承機制進行了改良,在Java中變成了多實現。

即一個類可以實現多個介面。

interface IA
{
    public abstract void show();
}

interface IZ
{
    public abstract void show();
}
//多實現
class Demo implements IA, IZ
{
    public void show(){ }
}

除此之外,一個類在繼承另一個類的同時,還可以實現多個介面。因此,介面的出現避免了單繼承的侷限性。

2.細節

介面與介面之間是繼承關係,而且介面可以多繼承。

四、介面的特點

  • 介面是對外暴露的規則
  • 藉口是程式的功能拓展
  • 介面的出現降低耦合性
  • 介面可以用來多實現
  • 類和介面之間是是相關係,而且類可以繼承一個類的同時實現多個介面。
  • 介面與介面之間可以有繼承關係。

五、介面與抽象類異同點

1.相同點:都是不斷向上抽取而來的

2.不同點:

  1. 抽象類需要被繼承,而且只能單繼承;介面需要被實現,而且可以多實現。
  2. 抽象類中可以定義抽象方法和非抽象方法,子類繼承後可以直接使用非抽象方法;介面中只能定義抽象方法,必須有子類去實現。
  3. 抽象類的繼承,是is a關係,在定義該體系的基本共性內容;介面的實現是like a關係,在定義體系額外功能。

六、介面的應用

用自己的理解描述一下筆記本和其相關介面的例子。

/*
膝上型電腦使用。
為了擴充套件筆記本的功能,但日後出現什麼功能裝置不知道。

定義一個規則,只要日後出現的裝置都符合這個規則就可以了。
規則在java中就是介面。

*/
interface USB// 暴露的規則。
{
	public void open();
	public void close();
}


class BookPC
{
	public static void main(String[] args)
	{
		useUSB(new UPan());//功能擴充套件了。
		useUSB(new UsbMouse());
	}

	//使用規則。
	public static void useUSB(USB u)//介面型別的引用,用於接收(指向)介面的子類物件。//USB u= new UPan();
	{
		if(u!=null)
		{
			u.open();
			u.close();
		}
	}
}
//一年後。有錢了,買了一個U盤------------------------------
//實現規則。

//這些裝置和電腦的耦合性降低了。

class UPan implements USB
{
	public void open()
	{
		System.out.println("upan open");
	}
	public void close()
	{
		System.out.println("upan close");
	}

}

//又一年後,又有錢了,買了一個滑鼠
class UsbMouse implements USB
{
	public void open()
	{
		System.out.println("UsbMouse open");
	}
	public void close()
	{
		System.out.println("UsbMouse close");
	}

}