java多態注意事項(陷進)

概述:多態是java一大特性。這裏參考think in java,記錄一下學習多態注意事項

1、private 修飾的方法沒有多態特性

public class PrivateOverride {
	
	/**
	 * dddd
	 */
	private void f(){
		System.out.println("private f()");
	}
	
	public static void main(String[] args) {
		PrivateOverride po = new Derived();
		po.f();
	}
}
class Derived extends PrivateOverride {
	/**
	 * eeee
	 */
	public void f(){
		
		System.out.println("public f()");
	}
}

輸入結果爲private f()

因爲父類的方法都是私有的,自然不會被子類重寫,而呈現多態特性。


2、成員變量不呈現多態特性,只針對方法(非靜態,非私有)

class Super{
	public int field = 0;
	public int getField(){
		return field;
	}
}
class Sub extends Super{
	public int field = 1;
	public int getField(){
		return field;
	}
	
	public int getSuperField(){
		return super.field;
	}
}
public class FieldAccess {

	public static void main(String[] args) {
		Super sup = new Sub();
		System.out.println("sup.field = " + sup.field + ", sup.getField() = " + sup.getField());
		Sub sub = new Sub();
		System.out.println("sub.field = " +
				sub.field + ", sub.getField() = " +
				sub.getField() +
				", sub.getSuperField() = " +
				sub.getSuperField());
	}
}

輸入結果:

sup.field = 0, sup.getField() = 1
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0

3、靜態方法也不呈現多態特性

class StaticSuper{
	public static String staticGet(){
		return "Base staticGet()";
	}
	
	public String dynamicGet(){
		return "Base dynamicGet()";
	}
}
class StaticSub extends StaticSuper{
	public static String staticGet(){
		return "Derived staticGet()";
	}
	public String dynamicGet(){
		return "Derived dynamicGet()";
	}
}
public class StaticPolymorphism {

	public static void main(String[] args) {
		StaticSuper  sup = new StaticSub();
		System.out.println(sup.staticGet());
		System.out.println(sup.dynamicGet());
	}
}


輸入結果:

Base staticGet()
Derived dynamicGet()

發佈了297 篇原創文章 · 獲贊 106 · 訪問量 77萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章