天天看點

個人筆記:抽象

概念:用abstract修飾的類就是抽象

抽象方法與抽象類的關系:

抽象方法必須在抽象類中;抽象類中可以有抽象方法,也可以沒有。

作用:用來做“模闆”,換言之也就是用來被繼承

抽象類沒有辦法執行個體化。

抽象類就是一個普通類的變形,也有構造方法

1.5抽象方法

概念:使用abstract修飾的方法,稱為抽象方法

使用場景:一般都是在父類中定義抽象方法,大多數子類都有不同的實作時,就抽象,否則可以定義成執行個體方法

作用:限制子類行為

如果父類是抽象類,并且裡面具有抽象方法,那麼在子類中就必須也有對應抽象方法的存在(若子類不是抽象類,必須去重寫對應的抽象方法。)。或者子類也是抽象類,則不需要對應的抽象方法。

重寫方法://在下一個子類中利用idea滑鼠右擊的generate中的override method可以選擇重寫父類或者更進階父類的防範

public abstract class Base {                           

  public abstract void show();

}

public class Child extends Base {

  @Override//利用alt+enter彈出的提示,重寫方法,@override就是對應的重寫方法,不可以删除,每一個@override對應都是自己所選擇的。

    public void show() {

        System.out.println("base");

    }

}

多層抽象方法:

使用繼承的方法,并利用abstract關鍵字進行使用

Final

如果想讓一個類作為最終類,無法再被其他的類所繼承,那麼使用final關鍵字,方法也是一樣,用final修飾的方法無法重寫。

讓一個類不再被其他類繼承,使用final修飾類就可以,

參考代碼:

Public final class Student{}  表示student類不能被繼承

//final修飾的方法不能被重寫

Public final int pi=3;//表示pi是常量  不能修改值

object:

萬物皆對象:在java裡面,所有的類在沒有顯式繼承任何類,預設繼承Object

兩個Student對象是否相等呢?

兩個對象可能在屬性的數值上是相等的,但是對象一定是不相等的。因為執行個體化對象是,是在堆記憶體中單獨new出了一個房間,所謂的數值相等也隻是房間擺設一樣,但是兩個房間是有本質的差別。

如果我想實作兩個房間在對象意義上相等如何

實作方案:重寫父類equals方法即可

預設情況下,equals比較的是兩個對象是否指向同一個記憶體位址

例:

如果兩個人的姓名和年齡一緻,那麼認為這兩個人是同一個人:

public class Base {

  private String name;

  private int age;

    public Base() {

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

                                                                         對象原有位址打碎重組為一個不重複的密鑰;

}

public class Test {

    public static void main(String[] args) {

        Base b=new Base();

        Base b1=new Base();

        System.out.println(b.equals(b1);//輸出為false,說明兩個人不是同一個人     //單擊滑鼠右鍵是,出現generate,點選equals and hascode();設定想要對比的屬性。

    }                                                             //但使用這種方法後,如果name和age的數字相等時,可以輸出true。記得用equals不要用等值符号。

}                                                                    //利用此方法輸出true,則證明兩個人是同一個人。

tips:

如果我直接列印對象,會輸出對象的位址,因為類名稱本來在棧中就是一位址形式存放的,如果我想列印出對應的屬性,那麼用滑鼠右鍵單擊選擇generate中的tostring方法,并且在開頭類名後加上implements Serializable。這樣列印出所有屬性。