Java日誌第19天 2020.7.24
阿新 • • 發佈:2020-07-24
介面中的注意事項
1.介面中不能有靜態程式碼塊和構造方法
2.一個類的直接父類是唯一的,但可以實現多個介面
3.實現類實現的多個介面中有重複的方法,只需要覆蓋重寫一次即可。
4.如果實現類沒有實現該類所有介面的所有方法,則該類是抽象類。
5.如果實現類實現的多個介面中存在重複的預設方法,那麼實現類一定要對衝突的預設方法進行覆蓋重寫
6.一個類如果直接父類中的方法和介面中的預設方法產生衝突,優先使用父類中的方法。
介面與介面之間是多繼承的
public interface MyInterfaceA { public abstract void methodAbs(); publicdefault void methodDefault(){ System.out.println("重複預設方法"); } }
public interface MyInterfaceB { public abstract void methodAbs(); public default void methodDefault(){ System.out.println("重複預設方法"); } }
public interface MyInterface extends MyInterfaceA, MyInterfaceB{ @Overridevoid methodAbs(); @Override default void methodDefault() { System.out.println("覆蓋重寫重複預設方法"); } }
父介面中預設方法重複,子介面必須進行方法覆蓋重寫。
多型性
extends和implements是多型性的前提
程式碼中多型性的體現,其實就是父類引用指向子類物件
格式:父類名稱 物件名 = new 子類名稱();
或者 介面名稱 物件名 = new 實現類名稱();
訪問方法:new的是誰就呼叫誰,沒有則向上找
訪問變數:等號左邊是誰就呼叫誰,沒有則向上找
物件的向上轉型
其實就是多型的寫法
格式: 父類名稱 物件名 = new 子類名稱()
含義 預測建立一個子類物件,當做父類使用
注意事項 向上轉型一定要是安全的
public abstract class Animal { public abstract void eat(); } public class Cat extends Animal { public void eat(){ System.out.println("貓吃魚"); } } public class Test { public static void main(String[] args) { //向上轉型 Animal animal = new Cat(); animal.eat(); } }
結果如下
物件的向上轉型
向上轉型後的物件不能呼叫子類特有的方法,如果想要呼叫這些方法,就需要物件的向下轉型。物件的向下轉型就是一個還原的動作。
格式:子類名稱 物件名 = (子類名稱)父類物件
含義 將父類物件還原為本來的子類物件
public class Cat extends Animal { public void eat(){ System.out.println("貓吃魚"); } public void catchMouse(){ System.out.println("貓抓老鼠"); } }
public class Test { public static void main(String[] args) { //向上轉型 Animal animal = new Cat(); animal.eat(); // animal.catchMouse();//報錯!不能這樣呼叫 //進行向下轉型 Cat cat = (Cat) animal; cat.catchMouse(); } }
instanceof關鍵字
物件名 instanceof 類名稱
返回的是布林值,判斷物件能否當做類的例項
public class Test { public static void main(String[] args) { //向上轉型 Animal animal = new Cat(); animal.eat(); // animal.catchMouse();//報錯!不能這樣呼叫 //進行向下轉型 //判斷能否向下轉型後再進行 if(animal instanceof Cat){ Cat cat = (Cat) animal; cat.catchMouse(); } } }