0

这个问题是我在面试 Java 程序员时被问到的。看看下面的代码。我需要做最小的改变来做这个a.f2(); 作品。

public class A {
  void f1(){}   
}

public class B extends A {
  void f2(){}
}

void main(String[] args) {
  A a =  ...     <- free space here
  a.f1();
}

附加 1 我已将 void f2(){} 添加到 A 类中,但被要求以另一种方式实现。

附加 2 此代码中没有更多可用空间

enter code here

4

5 回答 5

3
public class B {
  void f1(){}   
}

public class A extends B {
  void f2(){}
}

void main(String[] args) {
  A a =  new A();
  a.f2();
}
于 2012-11-14T09:50:33.507 回答
1

你有几个选择

  • 使您的对象 a 具有 B 的引用变量B a = new B()(忽略命名冲突;))
  • 更新 f2() 的调用并将其转换为 B
  • 在 A 中添加 f2() 然后在 B 中覆盖它

然后如果你打电话

A o = new B();
o.f2();

它将调用对象 B 中的 f2()

恐怕没有什么可以<- free space here让它在 BI 中调用 f2() 。也许是一个技巧面试问题?

于 2012-11-14T09:42:44.440 回答
1

我会做以下事情:

A a =  new B();

然后将其转换为 B 并调用 f2:

((B) a).f2(); 
于 2012-11-14T09:42:45.120 回答
0

只有这样:)

void main(String[] args) {
  B a =  new B();
  a.f2();
}
于 2012-11-14T09:41:23.683 回答
0

可能你可以使用它来实现它

public static void main(String[] args) {
    Parent p=new Child();
    ((Child)p).f2();
}

所有更改仅在提供的可用空间中进行 :)

于 2013-08-18T20:03:05.217 回答