首页 > 解决方案 > 将子类转换为超类并调用两个类都具有的函数

问题描述

public class Test3 {
    public static void main(String[] args) {
        Derived04 b = new Derived04();
        Base04 a = (Base04)b;
        System.out.println(a.i);
        System.out.println(a.f());
    }
}

class Base04 {
    int i=1;
    public int f() {return i;}
}
class Derived04 extends Base04 {
    int i = 2; 
    public int f(){return -i;}
}

这两个类都包含 f() 方法,所以当我将 d 转换为 a 时,当我调用 af() 时它会转到哪个方法?我想既然 a 在你做 ai 时被声明为 Base04 类型,它会给出 1 但为什么它使用子类中的方法?

标签: javacasting

解决方案


重点是关于实施和铸造。因此,当您创建 a 时,Derived04您已经实现了一个Derived04类,而不是它的父类,Base04所以即使您像这样强制转换它,它也会运行已实现的方法而不是强制转换方法,除非f()两个类之间存在差异。这不是我们的情况。


推荐阅读