Java 考试样本,好奇我是否做对了

Java 考试样本,好奇我是否做对了,java,Java,问题是: 假设o是类型Object的引用,该引用指向类型a对象,该对象包含f方法和toString方法。toString和f都没有参数。显示调用toString方法的语句和调用f方法的语句 答案是: f(); toString(); 不,那不对。首先,您没有使用实例o来调用这些方法。如果不指定实例,编译器将导致在this上隐式调用这些方法 其次,您不能调用o.f(),因为f不是对象的方法。需要显式强制转换来告诉编译器o属于A类型 Object o = new A(); String s =

问题是:

假设
o
是类型
Object
的引用,该引用指向类型
a
对象,该对象包含
f
方法和
toString
方法。
toString
f
都没有参数。显示调用
toString
方法的语句和调用
f
方法的语句

答案是:

 f();
 toString();

不,那不对。首先,您没有使用实例
o
来调用这些方法。如果不指定实例,编译器将导致在
this
上隐式调用这些方法

其次,您不能调用
o.f()
,因为
f
不是
对象的方法。需要显式强制转换来告诉编译器
o
属于
A
类型

Object o = new A();
String s = o.toString();
((A)o).f();
另见

取决于调用函数的范围。如果您在
A
类的实例方法中调用
f
toString
,则您是正确的

如果在
A
类的静态方法或其他类的任何方法中调用
f
toString
,则需要实例化一个新的
A
对象,然后调用其上的函数,如下所示:

A myA = new A();  // Assuming the existence of a no-args constructor
myA.f();
myA.toString();

如果您的引用严格属于
对象的类型
,那么您不能调用
f
,除非您首先将其转换为
A

,正如Mark指出的那样,因为
o
属于
对象的类型,即使它引用的是
A
的实例,调用
f
@TedHopp需要一个cast,马克·彼得斯的回答显然是正确的,但我自己也有启发:这不是我说过的“如果你的引用严格属于
对象的类型,那么你不能调用
f
,除非你首先将它转换为
a
”?是的。我想在你添加之前我已经发布了我的评论。
Object o = new A();
String s = o.toString();
((A)o).f();