【发布时间】:2013-12-29 14:16:52
【问题描述】:
我对转换对象类型有点困惑。举个例子:
public class Test() {
public void method1() { System.out.println("Method 1");
public void method2() { System.out.println("Method 2");
}
public class Test1() extends Test{
@Override public void method1() { System.out.println("Method 11");
@Override public void method2() { System.out.println("Method 22");
public void method 3() { System.out.println("Method 3");
public static void main(String[] args) {
Test a = new Test1();
a.method1(); //method invokes the overridden method1() of Test1, not Test the superclass
a.method2(); //method invokes the overridden method2() of Test1, not Test the superclass
a.method3(); //error, must cast == ((Test1)a).method3();
}
}
我很困惑的是当我调用method1和method2时,编译器或JVM能够调用派生类或子类的方法,那么为什么仍然需要向下转换/转换才能调用method3( )?
我尝试重载超类的method1和method2而不是重写它;编译器/JVM 将要求您在允许您调用重载方法之前向下转换对象引用变量。那么,这意味着在没有向下转换的情况下,您只能调用超类的方法以及子类中定义的覆盖方法?
【问题讨论】: