9、抽象類與接口


九、抽象類與接口

1、系統結構圖(xmind)

——1.抽象類:


—2.接口:



2、tips

——1.抽象類的由來
       多個對象都具備相同的功能,但是功能具體內容有所不同,那麼在抽取過程中,只抽取了功能定義,並未抽
取功能主體,那麼只有功能聲明,沒有功能主體的方法稱爲抽象方法。
       例如:狼和狗都有吼叫的方法,可是吼叫內容是不一樣的。所以抽象出來的犬科雖然有吼叫功能,但是並不
明確吼叫的細節。

——2.慄

1.需求:

    公司中程序員有姓名,工號,薪水,工作內容。

    項目經理除了有姓名,工號,薪水,還有獎金,工作內容。

2.分析:

程序員:

        屬性:姓名,工號,薪水。

        行爲:工作。

經理:

        屬性:姓名,工號,薪水,獎金。

        行爲:工作。

程序員和經理不存在着直接繼承關係。

但是,程序員和經理卻具有共性內容,可以進行抽取,因爲他們都是公司的僱員。

可以將程序員和經理進行抽取,建立體系。

代碼:

abstract class Employee
{
	private String name;
	private String id;
	private double salary;
	//僱員,有名字、id、薪水三個屬性,有work這個行爲
	Employee(String name,String id,double salary)
	{
		this.name = name;
		this.id = id;
		this.salary = salary;
	}	
	public abstract void work();
}
//程序員繼承僱員,輸入屬於程序員的三個屬性以及他工作code的行爲
class programmer extends Employee
{
	programmer(String name,String id,double salary)
	{
		super(name,id,salary);
	}
	//重寫work方法
	public void work()
	{
		System.out.println("code..");
	}
}
//經理繼承僱員,輸入屬於經理的三個屬性,工作manager的行爲
class manager extends Employee
{
	manager(String name,String id,double salary)
	{
		super(name,id,salary);
	}
	//重寫work方法
	public void work()
	{
		System.out.println("manager");
	}
}
class EmployeeDemo
{
	public static void main(String[] args)
	{
		programmer p = new programmer("wangwu","a1",10000);
		p.work();

		manager m = new manager("lisi","a2",11000);
		m.work();
		
	}
}


運行結果:


——3.接口

1.雖然抽象類中的全局變量和抽象方法的修飾符都可以不用寫,但這樣閱讀性很差,所以最好寫上。

2.類與類之間是繼承關係,類與接口直接是實現關係。

3.接口不可以實例化,能由實現了接口並覆蓋了接口中所有的抽象方法的子類實例化。否則,這個子類就是一個抽象類。


——4.抽象類和接口的異同點

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

不同點:

       1.抽象類需要被繼承,而且只能單繼承。

          接口需要被實現,而且可以多實現。

       2.抽象類中可以定義抽象方法和非抽象方法,子類繼承後,可以直接使用非抽象方法。

          接口中只能定義抽象方法,必須由子類去實現。

       3.抽象類的繼承,是is a關係,定義該體系的基本共性內容。

          接口的實現是like a關係。

       4.抽象類中能夠將變量和方法私有。

          接口中的方法和常量只能是public。


——5.接口實例

/*
筆記本電腦使用:
爲了擴展筆記本的功能,但日後出現什麼功能設備不知道。
因此需要定義一個規則,只要日後出現的設備都符合這個規則即可。
規則在java中就是接口
	
*/
interface Usb
{
	//暴露的原則
	public void open();
	public void close();
}

class UsbMouse implements Usb
{
	public void open()
	{
		System.out.println("mouse open");
	}
	public void close()
	{
		System.out.println("mouse close");
	}
}
//實現原則,這些設備和電腦的耦合性降低了
class Upan implements Usb
{
	public void open()
	{
		System.out.println("upan open");
	}
	public void close()
	{
		System.out.println("upan close");
	}
}

class  BookPc
{
	public static void main(String[] args) 
	{
		useUsb(new Upan());
	}
	//使用原則
	//接口類型的引用,用於接受(指向)接口的子類對象。
	public static void useUsb(Usb u)
	{
		if(u != null)
		{
			u.open();
			u.close();
		}
	}
}


運行結果:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章