Rumah  >  Artikel  >  Java  >  Penggunaan dan perbezaan antara antara muka dan kelas abstrak dalam Java

Penggunaan dan perbezaan antara antara muka dan kelas abstrak dalam Java

WBOY
WBOYasal
2024-05-01 09:42:01540semak imbas

Antara muka dan kelas abstrak digunakan untuk menentukan kontrak tingkah laku. Antara muka mentakrifkan tandatangan kaedah, manakala kelas abstrak mengandungi pengisytiharan dan pelaksanaan kaedah. Antara muka tidak boleh digunakan, tetapi kelas abstrak boleh. Kaedah dalam antara muka lalai kepada abstraksi awam, manakala kaedah dalam kelas abstrak lalai kepada abstraksi dilindungi. Antara muka digunakan untuk menentukan API biasa, manakala kelas abstrak digunakan untuk mencipta kelas asas dan menyediakan tingkah laku asas.

Java 中接口和抽象类的用法和区别

Penggunaan dan perbezaan antara muka dan kelas abstrak dalam Java

Pengenalan

Antaramuka dan kelas abstrak ialah dua konsep yang sangat penting dalam Java, tetapi kedua-duanya mempunyai kontrak yang berbeza kegunaan dan ciri.

Antaramuka

  • Antara muka ialah kelas khas yang mentakrifkan satu set perkara untuk dilakukan (kaedah) tetapi tidak melaksanakan kaedah ini.
  • Ia adalah jenis abstrak semata-mata dan tidak boleh dibuat seketika.
  • Sebuah kelas yang melaksanakan antara muka mesti melaksanakan semua kaedah yang diisytiharkan dalam antara muka.
  • Antara muka boleh mewarisi antara muka lain, tetapi mereka tidak boleh mewarisi kelas.
  • Kaedah dalam antara muka adalah abstrak awam secara lalai.

Contoh Kod:

public interface Drawable {
    void draw();
}

Kelas Abstrak

  • Kelas abstrak ialah kelas yang mengandungi kaedah abstrak dan kaedah konkrit.
  • Kaedah abstrak adalah kaedah yang hanya diisytiharkan tetapi tidak dilaksanakan.
  • Memajukan kelas abstrak akan memberikan pengecualian.
  • Kelas abstrak boleh mewarisi kelas lain atau kelas abstrak.
  • Kaedah dalam kelas abstrak dilindungi secara lalai.

Contoh kod:

public abstract class Shape {
    protected String color;
    public abstract void draw();
}

Penggunaan

Antaramuka: Digunakan untuk menentukan API awam, seperti antara muka bersatu yang boleh dilaksanakan oleh berbilang kelas.

  • Sebagai contoh, antara muka Drawable boleh mewakili mana-mana kelas yang boleh dilukis, tanpa mengira pelaksanaan khusus. Drawable 接口可以表示任何可以绘制的类,而无需考虑具体的实现。

抽象类:用于创建一个类的基类,并提供一些基本行为和状态,同时允许子类定制这些行为和状态。

  • 例如,一个 Shape 抽象类可以提供一些形状的共同属性(如颜色),并定义一个抽象的 draw() 方法,用于子类实现具体的绘制行为。

差异

  • 接口只包含方法声明,而抽象类既包含方法声明也包含实现。
  • 接口不能实例化,而抽象类可以派生出子类。
  • 接口中的方法默认是公共抽象的,而抽象类中的方法默认是受保护的抽象的。

实战案例

考虑一个自定义形状绘制应用程序,其中需要显示各种形状。

  • 可以创建一个 Drawable 接口来定义绘制方法。
  • 然后可以创建 RectangleCircle 等形状的类,这些类实现 Drawable 接口并提供自己的绘制实现。
  • 应用程序可以遍历各种形状并调用 draw()
🎜Kelas abstrak🎜: Digunakan untuk mencipta kelas asas untuk kelas dan menyediakan beberapa gelagat dan keadaan asas, sambil membenarkan subkelas menyesuaikan gelagat dan keadaan ini. 🎜🎜🎜Sebagai contoh, kelas abstrak Shape boleh menyediakan beberapa atribut biasa bagi bentuk (seperti warna) dan mentakrifkan kaedah draw() abstrak untuk pelaksanaan subkelas Tingkah laku lukisan khusus . 🎜🎜🎜🎜Perbezaan🎜🎜🎜🎜Antara muka hanya mengandungi pengisytiharan kaedah, manakala kelas abstrak mengandungi kedua-dua pengisytiharan kaedah dan pelaksanaan. 🎜🎜Antara muka tidak boleh dibuat seketika, tetapi kelas abstrak boleh memperoleh subkelas. 🎜🎜Kaedah dalam antara muka adalah abstrak awam secara lalai, manakala kaedah dalam kelas abstrak dilindungi abstrak secara lalai. 🎜🎜🎜🎜Kes Praktikal🎜🎜🎜Pertimbangkan aplikasi lukisan bentuk tersuai di mana pelbagai bentuk perlu dipaparkan. 🎜🎜🎜Anda boleh mencipta antara muka Drawable untuk menentukan kaedah lukisan. 🎜🎜Anda kemudiannya boleh membuat kelas bentuk seperti Rectangle dan Circle, yang melaksanakan antara muka Drawable dan menyediakan pelaksanaan lukisan mereka sendiri. 🎜🎜Aplikasi boleh melingkar melalui pelbagai bentuk dan memanggil kaedah draw() untuk memaparkannya. 🎜🎜

Atas ialah kandungan terperinci Penggunaan dan perbezaan antara antara muka dan kelas abstrak dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn