Java中的继承。面试时的问题

时间:2012-11-14 09:37:28

标签: java inheritance

这个问题我在面试时被问到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

5 个答案:

答案 0 :(得分:3)

public class B {
  void f1(){}   
}

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

void main(String[] args) {
  A a =  new A();
  a.f2();
}

答案 1 :(得分:1)

你有几个选择

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

然后,如果你打电话

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

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

<- free space here中没有任何内容可以让它在B中调用f2()我很害怕。也许是一个技巧面试问题?

答案 2 :(得分:1)

我会做以下事情:

A a =  new B();

然后将其投射到B并调用f2:

((B) a).f2(); 

答案 3 :(得分:0)

只有这样:)

void main(String[] args) {
  B a =  new B();
  a.f2();
}

答案 4 :(得分:0)

可能你可以使用

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

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