都可以;
一.一個接口能否繼承另一個接口?
接口繼承接口 本質就是一個抽象類繼承另一個抽象類(它們都沒寫方法的實例)。當一個類繼承了一個抽象類,它必須要重寫父類
抽象類中的抽象方法,如果不去重寫父類抽象方法的實例,那么這個類也是抽象類(這個抽象子類,直到重寫這個抽象方法的實例為止,
才能擺脫抽象的命運)。其實我們想想,一個類去實現一個接口也不就是一個實體子類把一個抽象的所以抽象方法實例化(重寫了
抽象父類 中全部抽象方法),當然抽象類和接口還是有區別的。我上上篇就寫到了抽象類和接口的區別,有興趣的可以去看看。
說到這里 ,其實我們還可以再提問自己一個問題,抽象類能否繼承接口呢?
答案大家也知道了,可以嗎。難道只能孔明能放火,還不讓我們程序員“有點想法”了。
抽象類能否繼承接口,我們可以給這個接口寫實例,也可以不寫留給子類(這個抽象類的子類)去重寫。
二
.一個抽象類能否實現一個接口?
這個問題我們可以這樣去思考,要想實現接口,那么我們要在這個實現類(這個抽象類)里面寫接口里面方法的實例。抽象類里面能存在方法的實例嗎?
大家應該都看過抽象類的概念了,抽象類里面可以存在實例。這樣我們就可以解釋抽象類可以實現一個接口。
當然我們也可以不在這個抽象類里面寫實例,把他轉嫁給這個抽象類的子類去寫,這也是沒有問題的。
下面我把抽象類和接口簡介一下,希望能把上面一段話理解的更明白點,當然,如果有說的不對的地方希望各位大神指點一二,小弟還只是個菜鳥。
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況(但是不是不允許寫)。不能創建
abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否
則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接
口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義
(即將程序體給予)所有這種接口的方法。然后,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到
接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。
下面給個例子,加深一下理解記憶。
public abstract class BasePhone implements Photo{ /** * photo是一個接口,它有一個抽象的拍照的方法 * 我們手機有自身的呼叫和發消息的抽象行為,我們把呼叫和發消息看做手機這個事物整體的功能 * 我們設計抽象類的初衷是為了描述一個事物,接口是為了把事物之間各自擁有的行為放在一起 ,便於我們去調用這些行為 * 我們可以總結: * 抽象類是對一種事物的抽象,即對類抽象,而接口是對行為的抽象 * */ public abstract void call();//呼叫 public abstract void message();//發消息 @Override public void photo() { //這段重寫可以不用寫,我只是測試一下會不會報錯 } }
public interface Net { //接口中的變量會被隱式地指定為public static final變量 String NET_TYPE = "4G"; void net(String NET_TYPE); }
public interface Photo { void photo();//拍照抽口 }
public class Phone1 extends BasePhone implements Net { @Override public void call() { System.out.println("有什么事,我們要聯系呦"); } @Override public void message() { System.out.println("給我發短消息,我必回"); } @Override public void photo() { System.out.println("美圖秀秀"); } @Override public void net(String NET_TYPE) { System.out.println(NET_TYPE); } }
測試類我就不寫了,大家可以隨便玩,如果大家想調用接口的常量,我們可以這樣去寫:
Net net= new Phone1();
String a=Net.NET_TYPE;//調用接口中的常量
net.net(a);
