什麼是抽象類?什麼是接口?接口和抽象類的區別在哪裏?怎樣去理解它們呢?

一、這裏咱們來參考一下博文。java

http://blog.csdn.net/fenglibing/article/details/2745123ide

接口和抽象類有什麼區別 spa

你選擇使用接口和抽象類的依據是什麼?.net

接口和抽象類的概念不同。接口是對動做的抽象,抽象類是對根源的抽象。設計

抽象類表示的是,這個對象是什麼。接口表示的是,這個對象能作什麼。code

好比,男人,女人,這兩個類(若是是類的話……),他們的抽象類是人。說明,他們都是人。orm

人能夠吃東西,狗也能夠吃東西,你能夠把「吃東西」定義成一個接口,而後讓這些類去實現它.對象

因此,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),可是能夠實現多個接口(吃飯接口、走路接口)。blog

第一點. 接口是抽象類的變體,接口中全部的方法都是抽象的。而抽象類是聲明方法的存在而不去實現它的類。
第二點. 接口能夠多繼承,抽象類不行
第三點. 接口定義方法,不能實現,而抽象類能夠實現部分方法。
第四點. 接口中基本數據類型爲static 而抽類象不是的。//在實際的操做中不須要顯示申明爲final,若是成員方法被默認修飾,默認爲public static修飾,若是成員變量被默認修飾,其修飾爲public static final類型。
繼承

當你關注一個事物的本質的時候,用抽象類;當你關注一個操做的時候,用接口。

抽象類的功能要遠超過接口,可是,定義抽象類的代價高。由於高級語言來講(從實際設計上來講也是)每一個類只能繼承一個類。在這個類中,你必須繼承或編寫出其全部子類的

全部共性。雖然接口在功能上會弱化許多,可是它只是針對一個動做的描述。並且你能夠在一個類中同時實現多個接口。在設計階段會下降難度的。

二、我我的對接口和抽象類的理解 代碼上來。

這裏我首先定義兩個接口,Interface1,interface2,interface3,interface4

package com.yuan.test;
public interface Interface1 {
public String abc="1123";//實際上你能夠定義string,或者說你沒必要要申明爲final static 由於它在接口當中,麼有方法,因此不能夠賦值或者修改。
//public final static String abc="1123";
public void abc();
}
package com.yuan.test;

public interface Interface3 {
 public void abcde();
}
package com.yuan.test;

public interface Interface2 extends Interface1,Interface3 {
public void abcd();
}
package com.yuan.test;

public interface Interface4 {
 public void abcdef();
}

/***抽象類以及抽象的方法**/

package com.yuan.test;
public abstract class AbstractTest {
 public void ab1(){} //若是不說明爲抽象的方法,必需要加上方法體
 public void ab2() {}////若是不說明爲抽象的方法,必需要加上方法體
 public abstract void ab3();//若是聲明爲抽象的方法,不須要方法體
}

說明:

從Interface2能夠看出,接口能夠繼承多個接口。也就是接口能夠多繼承。可是抽象類繼承只能夠繼承一個。

我有另一個問題是,接口除了能夠繼承接口以外,能夠繼承抽象類嗎??答案是不能夠的。緣由爲註釋

package com.yuan.test;
//The type AbstractTest cannot be a superinterface of Interface1; 
// a superinterface must be an interface
public interface Interface1 extends AbstractTest{
 public void abc();
}

/********總結一點,就是接口能夠被接口繼承,而後能夠被抽象類實現,另外接口不能夠實例化,但能夠經過子類的引用指向它******/

package com.yuan.test;
public class TestInterface extends Counter implements Interface2,Interface4{
	public static void main(String[] args){
	Interface1 i1=new TestInterface();//經過子類的引用指向接口。
	System.out.println("i1:"+i1.abc);	
	}
	@Override
	public void abc() {
		// TODO Auto-generated method stu	
	}
	@Override
	public void abcd() {
		// TODO Auto-generated method stub		
	}
	@Override
	public void abcde() {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void abcdef() {
		// TODO Auto-generated method stub	
	}
}
相關文章
相關標籤/搜索