1. 程式人生 > 其它 >演算法16 啊哈演算法 廣度優先搜尋( Breadth First Search, BFS) 迷宮問題 JAVA

演算法16 啊哈演算法 廣度優先搜尋( Breadth First Search, BFS) 迷宮問題 JAVA

抽象類

  • abstract修飾符可以用來修飾方法,也可以用來修飾類,修飾方法就是抽象方法,修飾類就是抽象類
  • 抽象類中可以沒有抽象方法,但是抽象方法的類一定要宣告為抽象類
  • 抽象類,不能使用new關鍵字來建立物件,它使用來讓子類繼承的
  • 抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的
  • 子類繼承抽象類,那麼就必須要實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類
//abstract 抽象類
//extends: 單繼承      (介面可以實現多繼承)
public abstract class Action {
    
    //約束~有人幫我們實現~
    //abstract ,抽象方法,只有方法名字,沒有方法的實現
    public abstract void doSomething();

    //1.不能new這個抽象類,只能靠子類去實現它:約束
    //2.抽象類裡可以寫普通方法,抽象方法必須寫在抽象類中
    //抽象的抽象:約束
    //抽象類存在的意義:提高開發效率,後期擴充套件性高
}
===================================
//抽象類的所有方法,繼承了它的子類,都必須要實現它的方法~
//除非該子類也為抽象類,那麼就需要由該子類的子類去實現該抽象方法
public class A extends Action{
    @Override
    public void doSomething() {
    }
}

介面

  • 普通類:只有具體實現

  • 抽象類:具體實現和規範(抽象方法)都有

  • 介面:只有規範,自己無法寫方法專業的約束!約束和實現分離:面向介面程式設計

  • 介面就是規範,定義的是一組規則

  • 介面的本質是契約,就像我們人間的法律一樣,制定好後大家都遵守

  • 面向物件(OO)的精髓,是對物件的抽象

  • 宣告類的關鍵字是class,宣告介面的關鍵字是interface

  • 介面作用:
    1. 是一種約束
    2. 介面中可以定義一些方法,讓不同的人實現~ 10--->1
    3. 介面中定義的方法都是public abstract
    4. 介面中定義的屬性(常量)都是public static final
    5. 介面不能被例項化,介面中沒有構造方法


    6. 一個類使用implements可以同時實現多個介面(多繼承)
    7. 一個類要實現一個介面,則必須重寫介面中的方法~

//抽象的思維~    java
//interface 定義的關鍵字,介面都需要有實現類
public interface UserService {

    //介面中定義的所有屬性都是常量~   public static final
    public static final int AGE = 99;

    //介面中的所有定義其實都是抽象的 public abstract
    public abstract void run(String name);
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);

}
========================================================
public interface TimeService {
    void timer();
}
========================================================
//抽象類:extends~
//類 可以實現介面  implements  介面
//實現了介面的類,就需要重寫介面中的方法~
//多繼承~利用介面實現多繼承~
public class UserServiceImpl implements UserService,TimeService{
    @Override
    public void run(String name) {
    }

    @Override
    public void add(String name) {
    }

    @Override
    public void delete(String name) {
    }

    @Override
    public void update(String name) {
    }

    @Override
    public void query(String name) {
    }

    @Override
    public void timer() {
    }
}