当子类使用Object变量实例化时,无法从超类访问方法

时间:2018-02-28 11:19:57

标签: java inheritance

我正在练习继承,并且在Bite扩展Gulp课程时有这些课程。

public class Gulp {
    public void method2() {
        System.out.println("Gulp 2");
        method3();
    }

    public void method3() {
        System.out.println("Gulp 3");
    }
}

public class Bite extends Gulp {
    public void method1() {
        System.out.println("Bite 1");
    }

    public void method3() {
        System.out.println("Bite 3");
    }
}

我试图通过创建Bite类的对象(使用三种不同类型的引用:Object,Bite和Gulp)来调用方法method2(),如下所示:

public class Main {
    public static void main(String[] args) {
        Object varObj = new Bite();
        Bite varBite = new Bite();
        Gulp varGulp = new Bite();

        if(varBite.getClass() == Bite.class) 
            System.out.println("Bite class");

        if(varObj.getClass() == Bite.class) 
            System.out.println("Also Bite class");

        varBite.method2();
        //prints what is expected

        varObj.method2();
        //throws compilation error -- cannot find method2()

        varGulp.method2();
        //prints what is expected
    }
}

当引用变量是Object的类型时,我收到错误。它说,虽然varObject.getClass()返回Bite.class,但它找不到符号。 任何人都可以解释..

1 个答案:

答案 0 :(得分:2)

如果您将变量声明为Bite类型,编译器将不允许您调用特定于Object的方法。

您有两种选择: 将对象声明为Bite,如varBite。或者将Object变量转换为Bite

((Bite)varObj).method2();