JAVA物件導向--抽象類

月亮警察發表於2024-03-11

一、抽象類

abstract修飾符可以用來修飾方法也可以修飾類;

  • 修飾方法稱為抽象方法

  • 修飾類稱為抽象類

注意:抽象類可以沒有抽象方法,但抽象方法必須在抽象類中

舉例

//抽象類,abstract:抽象
//父類
public abstract class Action {
    //抽象方法:可以不用寫具體的實現方法,寫一個方法名即可
    //抽象方法必須在抽象類中
    public abstract void test();
}
//extends:單繼承(介面可以多繼承)
//子類
public  class A extends Action {
    //Action類中存在抽象方法,A類必須重寫父類的方法 或者 把A類也設定為抽象的

    //重寫父類方法(實現)
    @Override
    public void test() {

    }
}

小結

  1. 抽象類不能使用new關鍵字來建立物件,只能靠子類繼承的去實現它
  2. 抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的
  3. 抽象的父類中有抽象方法那麼子類必須重寫父類的方法或者將子類也設定為抽象類

(繼承了抽象類中的方法的子類,必須要實現父類的方法(即重寫),除非子類也是抽象類,就需要由子類的子類去實現)

  1. 抽象類中可以寫普通的方法(即非抽象方法)
  2. 抽象方法必須在抽象類中
  3. 抽象類即抽象的抽象:約束

思考

  1. 抽象類存在構造器嗎
  2. 抽象類存在的意義?提高開發效率

二、介面

介面就是規範,定義一組規則,比如“如果你是...則必須能...”的思想

介面的關鍵字:interface

介面的本質是契約:即指定好後必須遵守

介面是OOP(物件導向)的精髓,是對抽象的抽象

  • 普通類:只有具體實現
  • 抽象類:具體實現和規範(抽象方法)都有
  • 介面:只有規範!是專業的約束,自己無法寫方法
    • 約束和實現分離:面向介面程式設計

舉例

//interface:介面
//介面
public interface UserService {
    //方法:介面中的方法預設為public abstract的方法
    //public abstract void add();
    void add();
    void delete();
    
    //常量:介面中的常量預設為public static final
    int num = 10;
    //public static final int num = 10;
}
//介面
public interface TimerService {
    void timer();
}
//類可以實現介面,關鍵詞:implements(實現)
//格式:implements 介面名
//介面可多繼承
//實現類
//實現了介面的類,就必須重寫介面中的方法
public class ServiceImpl implements UserService ,TimerService{
    //重寫方法
    @Override
    public void add() {
        
    }

    @Override
    public void delete() {

    }

    @Override
    public void timer() {
        
    }
}

注意:當沒有重寫方法時,會報錯,如下圖:

滑鼠放在報錯位置,按住Alt+Enter(Enter鍵),選擇Implement methods

選擇需要重寫的方法點選OK即可

小結

  1. 作用:
    • 約束
    • 定義一些方法,讓不同的人實現
  2. 方法預設型別:public abstract
  3. 常量預設型別:public static final
  4. 介面不能被例項化
    • 原因;介面中沒有構造方法
  5. implements可以實現多個介面
    • 在用於實現介面的類中,必須重寫介面中的方法

相關文章