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();