目錄
前言
1. 抽象類
1.1 定義
1.2 示例
1.3 使用
1.3.1代碼-抽象類
1.3.2代碼-抽象類繼承類使用
1.3.3輸出結果為:
1.4UML類圖展示類間的關系
2. 接口
2.1 定義
2.2 示例
2.2.1代碼-接口
2.3 使用
2.3.1代碼-接口實現(xiàn)
2.3.2代碼-接口實現(xiàn)類使用
2.3.3輸出結果為:
2.4UML類圖展示類間的關系
3. 抽象類和接口的區(qū)別
3.1 實現(xiàn)方式
3.2 方法類型
3.3 成員變量
3.4 構造方法
3.5 訪問修飾符
4.文字上的對比區(qū)別
5.直觀的二維表對比
6.抽象類和接口的使用場景
7. 總結
前言
Java是一種面向對象的編程語言,Java中的抽象類和接口是兩種常見的抽象概念,它們都能夠幫助我們實現(xiàn)抽象化和多態(tài)性,但是它們在一些細節(jié)上有所不同。本文將詳細介紹Java中抽象類和接口的定義、區(qū)別和使用,并提供相應的代碼示例。
1. 抽象類
1.1 定義
抽象類是一種特殊的類,它不能被實例化,只能被繼承。抽象類具有類的所有特性,包括成員變量、成員方法、構造方法等,但是其中的某些方法是抽象的,需要在具體的子類中實現(xiàn)。抽象方法沒有方法體,只有方法簽名,用abstract關鍵字修飾。
抽象類通常被用來作為其他類的基類,子類必須實現(xiàn)抽象類中定義的所有抽象方法才能被實例化。
抽象類可以包含一些具體的方法和成員變量,這些方法和成員變量在繼承的子類中可以直接使用。
1.2 示例
1.2.1代碼-抽象類
以下是一個抽象類的示例:
abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void makeSound();
}
在上述代碼中,Animal是一個抽象類,其中有一個抽象方法makeSound(),需要在具體的子類中實現(xiàn)。同時,Animal類中還有一個構造方法和兩個普通方法。
1.3 使用
1.3.1代碼-抽象類
我們可以通過繼承抽象類來實現(xiàn)具體的子類,同時需要實現(xiàn)其中的抽象方法。以下是一個繼承Animal類的示例:
class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
在上述代碼中,Dog類繼承了Animal類,同時實現(xiàn)了其中的抽象方法makeSound()。我們可以通過創(chuàng)建Dog類的實例來使用它。
1.3.2代碼-抽象類繼承類使用
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("小狗");
System.out.println(dog.getName());
dog.makeSound();
}
}
1.3.3輸出結果為:
小狗
汪汪汪
1.4UML類圖展示類間的關系
?
2. 接口
2.1 定義
接口是一種純抽象的類型,它只包含抽象方法和常量。
接口通常被用來描述一個對象可以做什么,而不是它是什么,準確的來說描述的對象的行為
接口不能被實例化,需要通過實現(xiàn)接口的類來使用。接口中的方法都是抽象的,用abstract關鍵字修飾。接口中的常量都是public static final類型的,可以直接通過接口名訪問。
2.2 示例
以下是一個接口的示例:
2.2.1代碼-接口
interface Shape {
double PI = 3.1415926;
double getArea();
double getPerimeter();
}
在上述代碼中,Shape是一個接口,其中有兩個抽象方法getArea()和getPerimeter(),還有一個常量PI。
2.3 使用
我們可以通過實現(xiàn)接口來使用它。以下是一個實現(xiàn)Shape接口的示例:
2.3.1代碼-接口實現(xiàn)
class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * PI * radius;
}
}
在上述代碼中,Circle類實現(xiàn)了Shape接口,并實現(xiàn)了其中的兩個抽象方法getArea()和getPerimeter()。我們可以通過創(chuàng)建Circle類的實例來使用它。
2.3.2代碼-接口實現(xiàn)類使用
public class Main {
public static void main(String[] args) {
Circle circle = new Circle(2);
System.out.println("面積:" + circle.getArea());
System.out.println("周長:" + circle.getPerimeter());
}
}
2.3.3輸出結果為:
面積:12.5663704
周長:12.5663704
2.4UML類圖展示類間的關系
?
?
3. 抽象類和接口的區(qū)別
雖然抽象類和接口都可以實現(xiàn)抽象化和多態(tài)性,但是它們在一些細節(jié)上有所不同。以下是抽象類和接口的區(qū)別:
3.1 實現(xiàn)方式
抽象類是一種特殊的類,需要通過繼承它來使用。接口是一種純抽象的類型,需要通過實現(xiàn)它來使用。
3.2 方法類型
抽象類中的方法可以是抽象的或者非抽象的,而接口中的方法都是抽象的。
3.3 成員變量
抽象類中可以有普通成員變量,也可以有靜態(tài)成員變量,而接口中只能有常量。
3.4 構造方法
抽象類中可以有構造方法,而接口中不能有構造方法。
3.5 訪問修飾符
抽象類中的成員變量和成員方法可以有public、protected、default、private四種訪問修飾符,而接口中的成員變量和成員方法只能有public訪問修飾符。
4.文字上的對比區(qū)別
(1)抽象類可以包含具體的方法和成員變量,而接口不能包含具體的方法和成員變量。
(2)一個類只能繼承一個抽象類,而一個類可以實現(xiàn)多個接口。
(3)抽象類的目的是為了作為其他類的基類,而接口的目的是為了描述一個對象可以做什么。
(4)抽象類中的抽象方法必須在子類中實現(xiàn),而接口中的所有方法都必須在實現(xiàn)類中實現(xiàn)。
(5)抽象類可以有構造方法,而接口不能有構造方法。
(6)抽象類可以擁有非抽象方法,而接口只能擁有抽象方法。
(7)抽象類中的訪問修飾符可以是public、protected和default,而接口中的訪問修飾符只能是public。
(8)抽象類可以擁有靜態(tài)方法和靜態(tài)變量,而接口只能擁有常量。
5.直觀的二維表對比
維度 | 抽象類 | 接口 |
---|---|---|
定義 | 一種特殊的類,不能被實例化 | 定義一組方法 |
方法 | 可以包含普通方法和抽象方法 | 只能包含抽象方法 |
構造器 | 可以有構造器 | 沒有構造器 |
繼承 | 可以被繼承 | 可以被實現(xiàn) |
多繼承 | 不支持多重繼承 | 支持多重實現(xiàn) |
訪問 | 可以有 public、protected、private 訪問修飾符 | 只能有 public 訪問修飾符 |
變量 | 可以有實例變量、類變量 | 只能有 public、static 常量 |
6.抽象類和接口的使用場景
抽象類和接口都有自己的使用場景,下面我們來看一下它們的具體應用:
(1)抽象類通常被用來作為其他類的基類,用來定義一組通用的方法和屬性。子類必須實現(xiàn)抽象類中的所有抽象方法才能被實例化。
(2)接口通常被用來描述一個對象可以做什么,而不是它是什么。接口可以被類實現(xiàn),用來強制實現(xiàn)一組特定的方法。
(3)如果一個類需要實現(xiàn)多個不同的藍圖,那么它應該實現(xiàn)多個接口。
(4)如果一個類需要實現(xiàn)一個通用的藍圖,并且還需要擁有一些具體的方法和屬性,那么它應該繼承一個抽象類。文章來源:http://www.zghlxwxcb.cn/news/detail-766967.html
7. 總結
本文詳細介紹了Java中抽象類和接口的定義、區(qū)別和使用,并提供了相應的代碼示例。抽象類和接口都是實現(xiàn)抽象化和多態(tài)性的重要手段,需要根據(jù)實際需求選擇使用。同時,需要注意它們在一些細節(jié)上的差異,以便正確使用它們。文章來源地址http://www.zghlxwxcb.cn/news/detail-766967.html
到了這里,關于Java中抽象類和接口的區(qū)別,一文弄懂,圖文并茂的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!