抽象類與介面

java是個爹發表於2020-09-23

抽象類與介面

一,抽象類

抽象類:
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();//抽象方法
}
  1. 抽象類中可以沒有抽象方法
  2. 抽象方法所在的類,一定是抽象類
  3. 抽象類可以被繼承,不能被例項化

二,介面

Java介面是一系列方法的宣告,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。可以理解為對一組方法宣告進行的統一命名,但這些於方法沒有提供任何實現。也就是說。,把一組方法宣告放在在一個介面中,然後繼承該介面的類都需要實現這些方法

介面的作用:

  1. 可以實現不同類的相同行為,不需要考慮類之間的層次關係;
  2. 可以指明多個類需要實現的方法;
  3. 可以使處於不同層次甚至互不相關的類具有相同的行為。

介面的使用

由於介面裡面存在抽象方法,所以介面物件不能直接使用關鍵字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中,介面的主要功能是解決單繼承侷限問題)

三,介面與抽象類的異同

在這裡插入圖片描述

相關文章