介面和抽象類是 Java 中兩種實作抽象和多型的方法,它們之間有一些區別,但也有一些相似之處,這一節我們將通過詳細的例子來更深入地了解介面和抽象類,
2.3.1. 介面
介面可以定義一組方法簽名,但不能包含方法的實作,一個類可以實作多個介面,實作介面的類必須實作介面中定義的所有方法,
定義介面:
interface InterfaceName {
ReturnType methodName(Parameters);
}
實作介面:
class ClassName implements InterfaceName {
// 實作介面中的所有方法
}
示例1:介面
interface Drawable {
void draw();
}
class Circle implements Drawable {
double radius;
@Override
public void draw() {
System.out.println("Drawing a circle with radius " + radius);
}
}
class Square implements Drawable {
double sideLength;
@Override
public void draw() {
System.out.println("Drawing a square with side length " + sideLength);
}
}
class Main {
public static void main(String[] args) {
Circle circle = new Circle();
circle.radius = 5;
circle.draw(); // 實作介面的方法
Square square = new Square();
square.sideLength = 4;
square.draw(); // 實作介面的方法
}
}
介面還可以具有默認方法和靜態方法,這些方法可以包含實作,
interface InterfaceName {
default ReturnType defaultMethodName(Parameters) {
// 默認方法的實作
}
static ReturnType staticMethodName(Parameters) {
// 靜態方法的實作
}
}
2.3.2. 抽象類
抽象類可以包含抽象方法(沒有實作的方法)和具體方法,子類必須實作抽象類中的所有抽象方法,一個類只能繼承一個抽象類,
定義抽象類:
abstract class AbstractClassName {
abstract ReturnType methodName(Parameters);
ReturnType methodName(Parameters) {
// 具體方法的實作
}
}
繼承抽象類:
class ClassName extends AbstractClassName {
// 實作抽象類中的所有抽象方法
}
示例2:抽象類
abstract class Shape {
abstract double getArea();
void printArea() {
System.out.println("The area is " + getArea());
}
}
class Circle extends Shape {
double radius;
@Override
double getArea() {
return Math.PI * radius * radius;
}
}
class Square extends Shape {
double sideLength;
@Override
double getArea() {
return sideLength * sideLength;
}
}
class Main {
public static void main(String[] args) {
Circle circle = new Circle();
circle.radius = 5;
circle.printArea(); // 繼承自抽象類的具體方法
Square square = new Square();
square.sideLength = 4;
square.printArea(); // 繼承自抽象類的具體方法
}
}
2.3.3. 介面與抽象類的區別
- 一個類可以實作多個介面,但只能繼承一個抽象類,
- 介面中的方法默認是
public,不能有其他訪問修飾符,抽象類中的方法可以有不同的訪問修飾符, - 介面不能包含實體變數(成員變數),只能宣告靜態常量,抽象類可以包含實體變數,
- 介面支持默認方法和靜態方法,抽象類不支持默認方法,
2.3.4. 何時使用介面和抽象類?
- 當你想要定義一組相關物件應該實作的方法,但不關心具體的實作時,使用介面,
- 當你想要為一組相關物件提供共享的實作和行為時,使用抽象類,
- 如果需要實作多個不同的行為組合,使用介面,因為 Java 不支持多繼承,所以不能繼承多個抽象類,但可以實作多個介面,
2.3.5. 小結
通過本節的學習,我們了解了介面和抽象類的概念以及它們之間的區別,介面和抽象類都可以實作抽象和多型,選擇使用哪個取決于具體的需求和設計,
我們學習了如何定義介面和抽象類,如何使用它們來實作多型,并通過具體的例子加深了對這兩個概念的理解,
在實際開發中,根據具體的應用場景和需求,合理地使用介面和抽象類,可以幫助我們設計出更加靈活、可擴展和易于維護的代碼,


推薦閱讀:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554515.html
標籤:其他
下一篇:返回列表
