我有這樣的代碼:呼叫子類方法通過超類引用
String stringRef = new String("Java"); // (1)
System.out.println("(2): " + stringRef.getClass()); // (2)
System.out.println("(3): " + stringRef.length()); // (3)
Object objRef = stringRef; // (4)
// System.out.println("(5): " + objRef.length()); // (5) Not OK.
System.out.println("(6): " + objRef.equals("Java"));
爲何無法調用線length()
(5);在第(6)行中將調用equals()
這個類?
我知道這一點。但爲什麼......因爲通過對象objRef = stringRef;我們正在將stringreference賦值給objReference ..意味着現在objRef指向與stringRef相同。 – mainu
但在編譯期間它的對象引用很重要。 equals()然而在你的子類String中被覆蓋,因此是由於運行時多態性String的equals()在運行時被調用 – PermGenError