抽象類與介面
抽象類與介面
一,抽象類
抽象類:
Java語言中,用abstract 關鍵字來修飾一個類時,這個類叫作抽象類。抽象類是它的所有子類的公共屬性的集合,是包含一個或多個抽象方法的類。抽象類可以看作是對類的進一步抽象。在物件導向領域,抽象類主要用來進行型別隱藏。
例如:
抽象方法:
只有方法的宣告,沒有方法的實現。以分號結束。
abstract int abstractMethod( int age);
含有抽象方法的類必須被宣告為抽象類。
抽象類不能被例項化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,並提供方法體。或
Abstract不能用來修飾屬性、構造器、private、static、final。
//抽象類
public abstract class Animal {
int leg;
//抽象類有構造器 (凡是類都有構造器)
public Animal() {
}
//抽象類有構造器 (凡是類都有構造器)
public Animal(int leg)
{
this.leg =leg;
}
abstract void eat();//抽象方法
}
- 抽象類中可以沒有抽象方法
- 抽象方法所在的類,一定是抽象類
- 抽象類可以被繼承,不能被例項化
二,介面
Java介面是一系列方法的宣告,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。可以理解為對一組方法宣告進行的統一命名,但這些於方法沒有提供任何實現。也就是說。,把一組方法宣告放在在一個介面中,然後繼承該介面的類都需要實現這些方法
介面的作用:
- 可以實現不同類的相同行為,不需要考慮類之間的層次關係;
- 可以指明多個類需要實現的方法;
- 可以使處於不同層次甚至互不相關的類具有相同的行為。
介面的使用
由於介面裡面存在抽象方法,所以介面物件不能直接使用關鍵字new進行例項化。介面的使用原則如下:
(1)介面必須要有子類,但此時一個子類可以使用implements關鍵字實現多個介面;
(2)介面的子類(如果不是抽象類),那麼必須要覆寫介面中的全部抽象方法;
(3)介面的物件可以利用子類物件的向上轉型進行例項化。
1. 如何定義介面
在java中定義類使用關鍵字class,定義介面使用關鍵字interface
public interface InterfaceA{ }
2. 如何實現介面
在java中繼承類使用關鍵字extends,實現介面使用關鍵字implements
class SubClass implements InterfaceA{ }
一個類可以實現多個介面
class SubClass implements InterfaceA, InterfaceB{ }
案例:
假設每一個USB裝置只有兩個功能:安裝驅動程式、工作。
定義一個USB的標準:
interface USB { // 操作標準
public void install() ;
public void work() ;
}
在電腦上應用此介面:
class Computer {
public void plugin(USB usb) {
usb.install() ;
usb.work() ;
}
定義USB裝置—印表機:
class Print implements USB {
public void install() {
System.out.println("安裝印表機驅動程式。") ;
}
public void work() {
System.out.println("進行列印檔案。") ;
}
}
定義USB裝置—耳機:
class Headset implements USB {
public void install() {
System.out.println("安裝耳機驅動程式。") ;
}
public void work() {
System.out.println("進行播放音樂。") ;
}
}
測試主類:
public class Test {
public static void main(String args[]) {
Computer computer = new Computer() ;
computer .plugin(new Print ()) ;
computer .plugin(new Headset()) ;
}
}
執行結果:
安裝印表機驅動程式。
進行列印檔案
安裝耳機驅動程式。
進行播放音樂。
對於子類而言,除了實現介面外,還可以繼承抽象類。若既要繼承抽象類,同時還要實現介面的話,使用一下語法格式:
class 子類 [extends 父類] [implemetns 介面1,介面2,...] {}
在Java中,一個抽象類只能繼承一個抽象類,但一個介面卻可以使用extends關鍵字同時繼承多個介面(但介面不能繼承抽象類)。
由此可見,從繼承關係來說介面的限制比抽象類少:
(1)一個抽象類只能繼承一個抽象父類,而介面可以繼承多個介面;
(2)一個子類只能繼承一個抽象類,卻可以實現多個介面(在Java中,介面的主要功能是解決單繼承侷限問題)
三,介面與抽象類的異同
相關文章
- Java總結-抽象類與介面Java抽象
- java中的抽象類與介面Java抽象
- Java的抽象類與介面理解Java抽象
- 抽象類VS介面抽象
- 抽象類和介面抽象
- Java中抽象類與介面的區別Java抽象
- Java中的介面與抽象類詳解Java抽象
- PHP中的抽象類、介面與性狀PHP抽象
- Java的抽象類 & 介面Java抽象
- 抽象類 & 介面比較抽象
- 介面和抽象類 (abstract)抽象
- 介面的行為抽象和抽象類的行為抽象抽象
- 抽象類及介面詳解抽象
- java中抽象類和介面Java抽象
- 介面和抽象類詳解抽象
- Java:面試題:抽象類與介面的區別Java面試題抽象
- Java基礎10 介面的繼承與抽象類Java繼承抽象
- Java中的介面與抽象類設計原則Java抽象
- Java 的抽象類, 介面以及內部類Java抽象
- 介面(抽象類)與後期靜態繫結學習抽象
- Java基礎-抽象類和介面Java抽象
- Java抽象類和介面 小白版Java抽象
- 介面和抽象類的區別抽象
- Java 介面與抽象方法Java抽象
- 【JAVA】筆記(5)--- final;抽象方法;抽象類;介面;解析繼承,關聯,與實現;Java筆記抽象繼承
- 介面、抽象類、普通類之間的關係抽象
- 介面是否可繼承(extends)介面? 抽象類是否可實現 (implements)介面? 抽象類是否可繼承具體類(concrete class)?繼承抽象
- 抽象類和介面,你瞭解多少?抽象
- 走進C# abstract,瞭解抽象類與介面的異同C#抽象
- 關於抽象類和介面的初步理解抽象
- 這次,徹底弄懂介面及抽象類抽象
- java介面和抽象類的簡單理解Java抽象
- Java中抽象類和介面的區別Java抽象
- JAVA基礎之三-介面和抽象類Java抽象
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- 結合實戰理解 Java 抽象類和介面Java抽象
- C#介面、抽象類、普通類和繼承(子類與父類)都有其特定的用途和場景C#抽象繼承
- 帶你看破介面抽象與工廠抽象