Java多型小知識

2021-09-12 10:59:08 字數 2200 閱讀 6795

1.

**當中體現多型性,其實就是一句話:父類引用指向子類物件。

格式:父類名稱 物件名 = new 子類名稱();

或者:介面名稱 物件名 = new 實現類名稱();

public class multi 

}public class fu

public void methodfu()

}public class zi extends fu

}

2.

在多型的**當中,成員方法的訪問規則是:

看new的是誰,就優先用誰,沒有則向上找。

口訣:編譯看左邊,執行看右邊。

對比一下:

成員變數:編譯看左邊,執行還看左邊。

成員方法:編譯看左邊,執行看右邊。

public class multimethod 

}public class fu /*extends object*/

public void method()

public void methodfu()

}public class zi extends fu

@override

public void method()

public void methodzi()

}

3.

訪問成員變數的兩種方式:

1. 直接通過物件名稱訪問成員變數:看等號左邊是誰,優先用誰,沒有則向上找。

2. 間接通過成員方法訪問成員變數:看該方法屬於誰,優先用誰,沒有則向上找。

public class multifield 

}

4.

向上轉型一定是安全的,沒有問題的,正確的。但是也有乙個弊端:

物件一旦向上轉型為父類,那麼就無法呼叫子類原本特有的內容。

解決方案:用物件的向下轉型【還原】。

public class demo 

}public class dog extends animal

public void watchhouse()

}public class cat extends animal

// 子類特有方法

public void catchmouse()

}public abstract class animal

5.

如何才能知道乙個父類引用的物件,本來是什麼子類?

格式:物件 instanceof 類名稱

這將會得到乙個boolean值結果,也就是判斷前面的物件能不能當做後面型別的例項。

public class demo02instanceof 

// 判斷一下animal本來是不是cat

if (animal instanceof cat)

givemeapet(new dog());

}public static void givemeapet(animal animal)

if (animal instanceof cat)

}}

public inte***ce usb 

public class computer

public void poweroff()

// 使用usb裝置的方法,使用介面作為方法的引數

public void usedevice(usb usb) else if (usb instanceof keyboard)

usb.close(); // 關閉裝置

}}// 鍵盤就是乙個usb裝置

public class keyboard implements usb

@override

public void close()

public void type()

}// 滑鼠就是乙個usb裝置

public class mouse implements usb

@override

public void close()

public void click()

}public class demomain

public static void method(double num)

}

java小知識之多型

向上轉型 子類轉化為父類 為本身,向下轉型 父類轉化為子類 為小的 instanceof 它的作用是判斷其左邊物件是否為其右邊類的例項,返回boolean型別的資料。例子 package lianxi public class override public static void show ani...

java經典小知識

math.round 11.5 返回 long 12,math.round 11.5 返回 long 11 tring s new string xyz 建立了幾個string object?兩個物件,乙個是 xyx 乙個是指向 xyx 的引用物件s。short s1 1 s1 s1 1 有什麼錯?...

Java經典小知識

math.round 11.5 等於多少?math.round 11.5 等於多少?math.round 11.5 返回 long 12,math.round 11.5 返回 long 11 tring s new string xyz 建立了幾個string object?兩個物件,乙個是 xyx...