在Java面試中,接口(Interface)和抽象類(Abstract Class)是兩個非常重要的概念。接下來我們將深入探討這兩個概念的區(qū)別和應(yīng)用場景。
首先,讓我們介紹一下接口和抽象類的定義:
// 接口的定義
interface MyInterface{
public void myMethod();
}
// 抽象類的定義
abstract class MyAbstractClass{
public abstract void myMethod();
}
從代碼中可以看到,接口和抽象類都定義了一個名為myMethod的方法。但是它們之間有哪些區(qū)別呢?
接口與抽象類有以下不同點:
1. 實現(xiàn)方式不同
接口使用implements關(guān)鍵字實現(xiàn),而抽象類使用extends關(guān)鍵字繼承。
// 接口的實現(xiàn)
class MyClass implements MyInterface{
public void myMethod(){
System.out.println("myMethod is called");
}
}
// 抽象類的繼承
class MyAbstractClassImpl extends MyAbstractClass{
public void myMethod(){
System.out.println("myMethod is called");
}
}
2. 方法實現(xiàn)方式不同
在接口中定義的方法只能是public的抽象方法,而抽象類中可以定義public、protected、default訪問權(quán)限的抽象方法和非抽象方法。
// 抽象類中定義的方法
abstract class MyClass{
public abstract void abstractMethod();
protected void nonAbstractMethod(){
System.out.println("nonAbstractMethod is called");
}
}
3. 繼承次數(shù)不同
Java中一個類只能繼承一個父類,但是可以實現(xiàn)多個接口。
下面是一個實現(xiàn)多個接口的示例。
// 定義兩個接口
interface A{
public void methodA();
}
interface B{
public void methodB();
}
// 實現(xiàn)兩個接口
class MyClass implements A, B{
public void methodA(){
System.out.println("methodA is called");
}
public void methodB(){
System.out.println("methodB is called");
}
}
4. 構(gòu)造函數(shù)的使用不同
構(gòu)造函數(shù)在接口中不可用,但是在抽象類中可以使用。
// 抽象類中的構(gòu)造函數(shù)
abstract class MyAbstractClass{
public MyAbstractClass(){
System.out.println("MyAbstractClass constructor is called");
}
public abstract void myMethod();
}
總結(jié)一下,接口和抽象類在設(shè)計和實現(xiàn)時各有優(yōu)缺點,要根據(jù)具體的業(yè)務(wù)需求和開發(fā)場景來選擇使用哪個。
上一篇div中劇中
下一篇div中的div居右顯示