class Base {
void test() {
System.out.println("base");
}
}
public class Derived extends Base {
void test() {
System.out.println("derived");
}
public static void main(String args[]) {
Derived d = new Derived();
Base b = (Base) d;
b.test();
}
}
o/p:派生
为什么?如果我将子类对象转换为父类(super class)对象,父类(super class)对象将仅引用子类对象?
转换根本不会改变对象。结果只是对同一对象的引用,但具有不同的编译时类型。转换为父类(super class)型不会失败,它只能对表达式的编译时类型产生影响,这有时对重载解析很有用。
以同样的方式,从父类(super class)类型的表达式转换为子类类型永远不会创建新对象——它只是检查转换是否有效,结果是对与之前相同对象的引用,但是在具有子类类型的表达式中。这比转换到父类(super class)更有用,因为它可以让您访问更多成员(通常)。例如:
String text1 = "hello";
System.out.println(text1.length());
Object object = (Object) text1; // Or just Object object = text1;
// object.length() would be invalid...
String text2 = (String) object;
// text2.length() is valid again
System.out.println(text2.length());
text1
、object
和 text2
的值都相同:对单个 字符串的引用整个示例中使用的对象。