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 クラスAにvoidf2(){}を追加しましたが、別の方法で作成するように依頼されました。

追加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 hereBI で 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 に答える