在下面的代码中,子类扩展了其父类(super class),并重写了其方法,使用它来调用子类特有的另一个方法,该方法使用子类的变量。
程序然后将子类的实例存储到父类(super class)类型的变量中,然后调用其方法。然后它就像子类类型一样运行,调用子类特有的方法和变量。但是,无法直接访问这些。
class Superclass {
void go() {
System.out.println(0);
}
}
class Subclass extends Superclass {
int i = 1;
@Override
void go() {
run();
}
void run() {
System.out.println(i);
}
}
public class JavaApplication {
public static void main(String[] args) {
Superclass instance = new Subclass();
instance.go(); // outputs 1; it must have called run() and accessed i
instance.run(); // causes compile-time error
System.out.println(instance.i);// causes compile-time error
}
}
一旦子类实例保存为父类(super class)类型,它仍然可以访问所有子类字段和方法。那么为什么我不能直接访问它们呢?
最佳答案
对于变量和静态方法,根据引用的类型调用方法,而不是根据引用的对象调用方法。
但是在实例方法的情况下,该方法是根据被引用的对象的类型调用的,而不是根据引用的类型
关于java - 将子类保存为父类(super class)类型并在 Java 中使用其方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22362230/