我正在练习继承,并且在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,但它找不到符号。
任何人都可以解释..
答案 0 :(得分:2)
如果您将变量声明为Bite
类型,编译器将不允许您调用特定于Object
的方法。
您有两种选择:
将对象声明为Bite
,如varBite
。或者将Object
变量转换为Bite
:
((Bite)varObj).method2();