閱讀674 返回首頁    go 微軟 go windows


我所理解的接口和抽象類

參考:https://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html


在實踐過程中,抽象類和接口都經常用到。但是,對於什麼情況下該用抽象類,什麼情況下該用接口,總是有點搞不清楚。

於是,在閱讀別人對著兩者理解之後,終於對兩者的區別有了更進一步的理解。

有關這兩者的一些基本區別,可以參考上麵的文章。這裏我隻介紹下對於抽象和接口該在什麼情況下使用的理解。

抽象類重點在於對於屬性和方法的繼承;而接口則重在多個類(可能他們之間毫無聯係)對同一種方法或者屬性的描述,體現了多態性。


抽象出一個類(類),定義一個抽象方法(判斷是否會飛)

1、抽象類

例如:抽象出一個鳥類。對於鳥類,抽象出一個方法。用來判斷這種鳥會不會飛。

由於鳥類中的canFly是抽象方法,因此所有繼承鳥類的子類都必須實現這個canFly方法。

/**
 * 鳥
 */
public abstract class Bird {

	public abstract boolean canFly();
}

/**
 * 燕子
 * 
 */
public class Swallow extends Bird{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}


}

/**
 * 貓頭鷹
 *
 */
public class Owl extends Bird{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}

}

假如現在有這種狀況。要同時描述鳥類和飛機,它們可以有一個共同的方法來判斷是否能飛。但是這個時候,兩者肯定是沒有繼承關係的啦。

你不能指望飛機通過繼承鳥類來獲得這個canFly的方法。

此時,你就可以把canFly抽象到接口中,然後鳥類和飛機都繼承這個接口。

2、接口

public interface IFly {
	public abstract boolean canFly();
}

/**
 * 鳥
 */
public class Bird implements IFly{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}

}

/**
 * 飛機
 *
 */
public class Airplane implements IFly {

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return true;
	}

}



最後更新:2017-04-02 16:47:59

  上一篇:go 二進製兼容原理 - C/C++ &Java
  下一篇:go 一個故事搞懂經濟危機(少兒不宜)