並不是所有的事物都可以多型的發生,多型只適用於普通的方法呼叫(private方法和final方法肯定不具有多型,包訪問許可權的方法,根據匯出類和基類的位置決定,均在包內則可以繼承)。
1、無法「覆蓋」私有方法
private方法自動被當作final方法,並且對匯出類遮蔽。如果在匯出類中具有乙個和基類private方法一摸一樣的方法,這不是多型。這只是匯出類中的乙個全新的方法。
如本例中privateoverride的private f()方法在子類derived中不可見,因此不可能被過載;derived物件中f()方法是乙個全新的方法。當向上轉型時:privateoverride d = new derived(); d是無法看見derived()的新方法(即privateoverride沒有的介面)的。
例程:
package polymorphism;
public
class
privateoverride
public
static
void main(string args)
}class
derived
extends
privateoverride
}/* output
privateoverride's private f()
*/
2、無法覆蓋域
任何域訪問操作都是在編譯期解析的,因此不是多型。如果你直接訪問某個域,這個訪問會在編譯期進行解析(編譯期基類的域解析會先於匯出類的域解析),就像下面所演示的。
本例中:p.field就是直接訪問field這個域,是在編譯期完成的。sp.field和sb.field分配了不同的儲存空間,sb實際上包含了兩個field域:它自己的和它從super處得到的。並且在引用sb.field時預設域並非super版本的field域,引用sp.field時預設域是它自己的field域。
例程:
package polymorphism;
class
super
}class
subextends
super
public
int getsuperfield()
}public
class
filedaccess
}
3、無法覆蓋靜態方法
如果某個方法是靜態的,它的行為就不具有多型性。
Java中的多型
多型也就是乙個名字多中狀態,這就叫多型。例如,人 老師,學生 老師和學生都是人,也就是人現在有兩種狀態。多型有四種型別 1,基本型別的多型。例如,byte,int,double,float,long。例如2,我們可以把它當作int型別,byte型別,long型別,還可以把其當作double型別。2說...
java中的多型
下面乙個例子,可以很清楚的給大家講解什麼是多型 父類 public class baseclass public void test 子類 public class subclass extends baseclass public void sub 呼叫 public static void ma...
Java中的多型
多型 某一種事物的多種存在形態 1 體現 父類引用指向子類的物件,即父類f 子類z,f fu new z 2 好處 大大提高程式擴充套件性 3 前提 必須是繼承或實現關係 且存在覆蓋 4 弊端 只能訪問父類的成員 轉型 父類引用指向子類物件時,又想要使用子類中的方法,那 麼就需要將該父類引用強轉成指...