Java中的接口和抽象類(lèi)是兩個(gè)重要的概念,在面向?qū)ο缶幊讨校豢苫蛉?。接下?lái),我們將分別介紹Java中常見(jiàn)的接口和抽象類(lèi)。
Java常見(jiàn)接口
接口是一種絕對(duì)抽象的類(lèi)型,它只定義了方法簽名。在Java中,interface關(guān)鍵字用來(lái)定義接口。
public interface MyInterface { public void method1(); public void method2(); }
其中,MyInterface接口定義了兩個(gè)方法method1和method2,它們都是抽象的。在實(shí)際應(yīng)用中,我們可以創(chuàng)建一個(gè)實(shí)現(xiàn)該接口的類(lèi),然后實(shí)現(xiàn)這些方法:
public class MyClass implements MyInterface { public void method1() { // 實(shí)現(xiàn)方法1 } public void method2() { // 實(shí)現(xiàn)方法2 } }
另一方面,Java中的接口也可以包含常量和靜態(tài)方法,其中,常量在接口中默認(rèn)是static和final類(lèi)型的。這意味著我們不需要在接口中顯示地聲明這些關(guān)鍵字,并且可以直接通過(guò)接口名訪問(wèn)常量。例如:
public interface MyInterface { int MY_CONSTANT = 100; void method1(); void method2(); static void myStaticMethod() { // 實(shí)現(xiàn)靜態(tài)方法 } }
Java常見(jiàn)抽象類(lèi)
Java中的抽象類(lèi)是一種不能被實(shí)例化的類(lèi),它的主要目的是為派生出子類(lèi)提供一個(gè)通用的模板。抽象類(lèi)中可以包含抽象方法和非抽象方法。
public abstract class MyAbstractClass { public void nonAbstractMethod() { // 實(shí)現(xiàn)非抽象方法 } public abstract void abstractMethod(); }
如上代碼所示,MyAbstractClass抽象類(lèi)包含一個(gè)非抽象方法nonAbstractMethod和一個(gè)抽象方法abstractMethod,后者沒(méi)有具體實(shí)現(xiàn)。當(dāng)一個(gè)類(lèi)繼承自抽象類(lèi)時(shí),它必須實(shí)現(xiàn)抽象類(lèi)中的所有抽象方法。例如:
public class MyClass extends MyAbstractClass { public void abstractMethod() { // 實(shí)現(xiàn)抽象方法 } }
通過(guò)繼承MyAbstractClass抽象類(lèi),MyClass類(lèi)必須實(shí)現(xiàn)其中的所有抽象方法,包括抽象方法abstractMethod。
需要注意的是,抽象類(lèi)和接口的主要區(qū)別是抽象類(lèi)可以包含具體的方法實(shí)現(xiàn),而接口不能。此外,每個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),但可以實(shí)現(xiàn)多個(gè)接口。