例1:
package my.ex1;
/** * 基類
* @author henry
* */
public class base
public void show()
}package my.ex1;
/** * 子類
* @author henry
* */
public class child extends base
}package my.ex1;
/** * 測試類
* @author henry
* */
public class hello
}
輸出結果為:
child output
原因:
obj實際是child物件,由於child繼承自base, 當obj呼叫show()方法時,由於子類child沒有過載show()方法,因此呼叫的是繼承而來的show()方法;
但show()內部呼叫了print()方法,實際可以理解為this.print(),這裡的this指的是child類的物件obj,因此呼叫的是child過載過的print()方法,輸出結果為child output。
例2:
package my.ex2;
/** * 父類
* @author henry
* */
public class father
public static void main(string args)
}package my.ex2;
/** * 子類
* @author henry
* */
public class son extends father
}
輸出結果為:
father output
原因:
在father類的main方法裡,定義了乙個son物件賦值給father類引用name, 我們所期望的輸出是public f().但是由於private方法被自動認為是final方法,而且對子類son是遮蔽的。因此,在這種情況下,son類中的f()方法就是乙個全新的方法;既然父類中的f()方法在子類son中不可見,因此甚至也不能過載。
結論就是:只有非private方法才可以被覆蓋,但是還需要密切注意覆蓋private方法的現象,這時雖然編譯器不會報錯,但是也不會按照我們所期望的來執行。確切的說,在子類中,對於父類中的private方法,最好採用不同的名字。
例3:
package my.ex3;
/** * 父類
* @author henry
*/public class super
}package my.ex3;
/** * 子類
* @author henry
*/public class sub extends super
}package my.ex3;
/** * 客戶端類
* @author henry
*/public class client
}
輸出結果:
obj.field=1;field=0
原因:
當sub物件轉型為super引用時,任何域訪問操作都將由編譯器解析,因此不是多型的。在本例中,為super.field和sub.field分配了不同的儲存空間。這樣,sub實際上包含兩個稱為field的域:它自己的和它從super處得到的。然而,在引用sub中的field時所產生的預設域並非super版本的field域,因此obj.getfield()得到的值,是sub中的field值,即0。
例4:
package my.ex4;
public class staticsuper
public int dynamicget()
}package my.ex4;
public class staticsub extends staticsuper
public int dynamicget()
}package my.ex4;
public class statictest
}
輸出結果:
1
9
原因:
靜態方法是與類關聯的,如果某個方法是靜態的,那它的行為就不具有多型性。因此staticsuper的引用obj所獲取到的staticget()方法,是staticsuper類中的staticget()方法,輸出結果即為1。而非靜態方法才具有多型性,找到了staticsub的dynamicget()方法,輸出了9.
Java學習 java 多型
多型 一種事物的多種形態 多型的規則 前提 1.類與類之間要建立關係,建立繼承的關係 2.必須要有方法的重寫 3.父類的指標 引用 指向子類的物件 空間 public static void main string args class animal class cat extends animal...
java 集合小記1
集合集合顧名思義,就是相同型別的東西湊一塊了。collection 生出了幾個兒子 list set map queue.和他這幾個兒子交流了幾天交流的我是混混燉燉,感覺自己被玩壞了,看似很簡單,越看越不是那麼回事。1.這幾個兒子派生了孫子,平常都是孫子幹活。先說一下 大兒子 list list之下...
java 多型總結
多型 01 父類的引用指向自己子類的多型 02 多型的存在提高了程式的擴充套件性 03 多型的前提 必須是類與類之間有關係 要麼繼承要麼實現 還有就是存在覆蓋 04 子類向上轉型 和父類向下轉型 instanceof abstract class animal class car extends a...