概念:用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。這樣列印出所有屬性。