Java中接口和抽象類(lèi)是兩種不同的概念,但它們都是用來(lái)實(shí)現(xiàn)多態(tài)性的工具。
接口是一種特殊的類(lèi),它只包含常量和抽象方法的定義。接口的定義使用interface關(guān)鍵字:
interface MyInterface { int MAX_VALUE = 100; void method(); }
接口中的方法都是抽象方法,不需要使用abstract關(guān)鍵字定義。通過(guò)接口,可以定義類(lèi)中必須實(shí)現(xiàn)的方法,從而實(shí)現(xiàn)多態(tài)性。
抽象類(lèi)是一個(gè)類(lèi),它不能被直接實(shí)例化,只能被繼承。抽象類(lèi)中可以包含抽象方法和非抽象方法,抽象方法的定義使用abstract關(guān)鍵字:
abstract class MyAbstractClass { public void method1() { System.out.println("Non-abstract method"); } abstract void method2(); }
與接口不同,抽象類(lèi)中可以包含非抽象方法的實(shí)現(xiàn)。抽象類(lèi)的作用是為了讓子類(lèi)可以重寫(xiě)其中的抽象方法,從而實(shí)現(xiàn)多態(tài)性。
接口和抽象類(lèi)的區(qū)別在于,接口只包含常量和抽象方法的定義,而抽象類(lèi)可以包含非抽象方法的實(shí)現(xiàn)。此外,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類(lèi)。