抽象類和介面的關係
阿新 • • 發佈:2018-12-09
Java的基礎面試題還是很多會考這個的,所以自己總結下。(JDK8之後)
相同點:
1.抽象類和介面都不能被例項化
2.它們當中都能夠包含抽象方法
重點是它們的區別:
1、抽象類當中有抽象方法和普通方法(有方法體),普通方法可以不被重寫;
介面當中的方法包含抽象方法和預設(default)方法,同樣預設方法也可以不被重寫,呼叫時需要藉助介面的實現類的物件來進行呼叫,並且在JDK8.0之後,介面中也能有靜態方法(介面名.方法名呼叫)。
2、抽象類中有構造器和初始化塊,但是介面中沒有。
3、介面當中定義的是靜態常量,必須用public static final來進行定義,不能定義普通成員,而抽象類當中兩者都能進行定義。
抽象類的具體實現
public abstract class TestAbstractCLass { //抽象類可以有構造方法和初始化塊 TestAbstractCLass() { System.out.println("抽象類的構造器"); } //普通方法 public void normalMethod() { System.out.println("這是一個抽象類的普通方法"); } //普通靜態方法 public static void normalStaticMethod() { System.out.println("這是一個抽象類的普通靜態方法"); } //抽象方法,只能被public和protected修飾 abstract void absMethodFromAbstractClass(); } public class Sontest extends TestAbstractCLass{ Sontest() { super(); } @Override void absMethodFromAbstractClass() { } //抽象類中的普通方法,可選擇是否重寫 // @Override // public void normalMethod() { // super.normalAbs1(); // } public static void main(String[] args) { //呼叫抽象類的靜態普通方法,直接抽象類.靜態方法名即可呼叫 TestAbstractCLass.normalStaticMethod(); //呼叫抽象類中的普通方法(需要通過子類的物件來進行呼叫) new Sontest().normalMethod(); }
介面的具體實現
public interface TestInterface { //預設方法 default void defaultMethod() { System.out.println("介面中的預設方法"); } //抽象方法(預設為public abstract修飾) void absMethodFromAbstractInterface(); //JDK8後加入的靜態方法 static void staticMethod() { System.out.println("介面中的靜態方法"); } } public class Sontest implements TestInterface{ //重寫介面中的抽象方法 @Override public void absMethodFromAbstractInterface() { } //介面中的預設方法,可被重寫也可不被重寫 // @Override // public void defaultMethod() { // // } public static void main(String[] args) { //呼叫介面中的預設方法 new Sontest().defaultMethod(); //靜態方法的呼叫 TestInterface.staticMethod(); } }