2011-12-14 27 views
0

私は15/30点しか正しくないと言って宿題を取り戻しましたが、どの質問が間違っているのか、それが間違っているのかについての説明はありませんでした。私は試験が来ていると私はそれを取る前にこれを理解したいと思います。私は誰かが私が正しい/間違っていることを理解するのを助けることができると期待していたのですか?なぜ?だからここ静的/動的タイプとVtableの明確化が必要

は私の割り当てた:

は、次のJavaプログラムを考えてみましょう:

public class Base { 

    public  void m(Object o) { System.out.println("Base.m(Object)"); } 
    public static void m(String s) { System.out.println("Base.m(String)"); } 
    public  void m(Class c) { System.out.println("Base.m(Class)"); } 
    } 

    public class Derived extends Base { 

    public  void m(Object o) { System.out.println("Derived.m(Object)"); } 
    public static void m(String s) { System.out.println("Derived.m(String)"); } 
    public static void main(String[] args) { 

     Base b = new Derived(); 
     b.m(new Object()); 
     b.m(new Integer(5)); 
     b.m("Hello"); 
     b.m(b.getClass()); 
    } 
    } 
  • 質問1(5ポイント):Derived.main中のBの静的な型が(何が) ?

    私の答え:ベース

  • 質問2(5ポイント):Derived.main中のBのダイナミック型は()とは何ですか?

    私の答え:派生

  • 問3(20ポイント):私たちの 翻訳者のための派生のvtableで正しい順序エントリは何ですか? classname.methodname(typename) "表記を使用してください。 また、最初のエントリ(__isa)は無視してください。私はBase.m(文字列sの印象の下だ派生のvtable-

    • Derived.m(オブジェクト)
    • Base.m(クラス)

    私の答え)とDerived.m(String s)はどちらも静的メソッドです。したがって、vtableには含まれません。また、Derived.m(Object)がBase.m(Object)の代わりに使用されると仮定し、DerivedのVtableには含まれないと仮定しました。

+1

コンパイラーが多態性をどのように実装しているかを知るにはどのようなテストが必要ですか? –

+0

オブジェクト指向プログラミングに関するドイツの狂った教授の最終試験。彼はファイナルのすべての質問にそれにスタートレックのテーマがあると言いました。私は昨年のハリー・ポッター・テーマ試験最終試験を見ていて、私は自分自身を撃ちたい。私は、ハリー・ポッターとすべての人が好きですが、息子のスター・トレックはいいですか? – user1098887

答えて

1

質問1(5ポイント):Derived.main中のBの静的な型は()とは何ですか?

正しい:Base b = new Derived();

質問2(5ポイント):Derived.main(中​​Bのダイナミック型はどのようなものです)静的タイプは、この場合のベースには、常に宣言された型のですか?

正しい:ダイナミック型は、この場合の変数が指しているタイプは、

を導出する

問3(20ポイント):正しくご翻訳者のための派生のvtable内のエントリを命じていますか? classname.methodname(typename) "表記を使用してください。また、__isaという最初のエントリを無視します。

  • Derived.m(オブジェクト)オーバーライド Base.m(オブジェクト):派生。M(オブジェクト)が正しい
  • Base.m(クラスC)過負荷 Derived.m(オブジェクト):Base.m(クラスC)が正しい

場合静的メソッドは、考慮しなければならなかった。

  • Derived.m(Stringを)だろう Base.m(String s)。メソッドが陰影付けされている場合、このメソッドは純粋に静的タイプに依存します。この場合、静的型はBaseであるため、Base.m(String s)が呼び出されます。

ここインスタンスの奇妙な例です:

Derived a = null; 
a.m("World"); 

これはDerived.m(String)、なぜを出力しますか? aの動的タイプはnullですが、Derived.m(String)は、静的タイプa(これはDerivedです)を気にしています

関連する問題