问题是:
假设o
是Object
类型的引用,它指向包含A
方法和f
方法的类型toString
对象。 toString
和f
都没有参数。显示调用toString
方法的语句和调用f
方法的语句。
是答案:
f();
toString();
答案 0 :(得分:12)
不,那不对。首先,您没有使用实例o
来调用方法。如果不指定实例,编译器将导致在this
上隐式调用这些方法。
其次,您无法调用o.f()
,因为f
不是Object
的方法。需要使用显式强制转换来告诉编译器o
类型为A
。
Object o = new A();
String s = o.toString();
((A)o).f();
答案 1 :(得分:1)
取决于您调用该函数的范围。如果您在f
类的实例方法中调用toString
和A
,那么您是正确的。
如果您在f
类的静态方法或其他类的任何方法中调用toString
和A
,则需要实例化新的A
对象,然后调用它上面的函数,如下所示:
A myA = new A(); // Assuming the existence of a no-args constructor
myA.f();
myA.toString();
如果您的引用严格属于Object
类型,则无法调用f
,除非您先将其强制转换为A
类型。