当子类使用Object变量实例化时,无法从超类访问方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当子类使用Object变量实例化时,无法从超类访问方法相关的知识,希望对你有一定的参考价值。
我正在练习继承,并且在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,但它找不到符号。任何人都可以解释..
答案
如果您声明变量类型为Bite
,编译器将不允许您调用特定于Object
的方法。
您有两个选择:将对象声明为Bite
,如varBite
。或者将Object
变量强制转换为Bite
:
((Bite)varObj).method2();
以上是关于当子类使用Object变量实例化时,无法从超类访问方法的主要内容,如果未能解决你的问题,请参考以下文章