9

私は学生で、Java を学んでいます。私が把握するのに苦労している概念が1つあり、誰かが私のためにこれに光を当ててくれることを望んでいます. 私の質問は、ポリモーフィズムに関するものです。たとえば、次のコードがあるとします。

Animal a = new Lizard("Lizzy", 6);  //Lizard extends Animal
  1. 私が理解していることから、変数の型は Animal であるため、 a は Animal のすべての特性を持ちます。ただし、作成されたオブジェクトは Lizard であるため、Lizard クラスのオーバーライドされたメソッドは、Animal クラスのメソッドの代わりに使用されます。これでいいのか>

  2. また、作成中にどのクラスのコンストラクターが使用されますか?

助けてくれてありがとう。結構見てきた

4

3 に答える 3

9

1.私が理解していることから、変数の型は Animal であるため、 a は Animal のすべての特性を持ちます。ただし、作成されたオブジェクトは Lizard であるため、Lizard クラスのオーバーライドされたメソッドは、Animal クラスのメソッドの代わりに使用されます。これでいいのか>

はい、あなたは正しいです。

2.また、作成中にどのクラスコンストラクターが使用されますか?

          Animal a = new Lizard("Lizzy", 6);  //Lizard extends Animal

Lizard は Animal のサブクラスであるため、最初にLizardsコンストラクターが呼び出され、次に Lizards コンストラクターからAnimalコンストラクターが呼び出されます。this()を使用した Lizard のコンストラクタ。Animal コンストラクターでは、最初の行にsuper()への別の呼び出しがあります。Animal がクラスを拡張しないと仮定すると、コンストラクターはすべてのオブジェクトのスーパークラスとして呼び出されます。java.lang.Object'sjava.lang.Object

  public Object() {

    }
    Class Animal {
     public Animal(){
      //there will be a super call here like super()
    }

    class lizard extends Animal {
    public Lizard(your args) {
       //there will be a super() call here and this call's animal's no-args constructor
     }
    }

 }

実行の順序は次のようになります

  1. トカゲのコンストラクタが呼び出されます
  2. オーバーロードされたコンストラクターへの this() 呼び出しがない限り、super() への呼び出し、つまり、呼び出しの動物の引数のないコンストラクター
  3. java.lang.Object のコンストラクターは、super() を使用して animal から呼び出されます。
  4. java.lang.Object のコンストラクター コードが実行されます
  5. 動物コンストラクターコードが実行されます
  6. Lizards コンストラクター コードが実行されます
于 2012-12-08T04:22:42.390 に答える
0
  1. これは正しいです。参照の型が であってもAnimal、すべてのメソッド呼び出しは定義に解決されます (Lizard存在する場合)。そうでない場合は、次の直接の親のバージョンが呼び出されます。

  2. aは単なる参照であり、実際のオブジェクトは型Lizardです。したがって、Lizardクラスのコンストラクターが呼び出されます。次に、 を使用してスーパークラスのコンストラクターを呼び出すことができますsuper()

于 2012-12-08T04:20:01.690 に答える
0
  1. Any overridden methods in the Lizard class will be used instead of those in the Animal class

    はい、あなたが正しい

  2. which classes constructor will be used while creating a?

    サブクラスを作成すると、スーパークラスのコンストラクターが暗黙的に呼び出されます。したがって、 であるスーパークラスと であるAnimalサブクラスの両方Lizardが使用されます。

于 2012-12-08T04:20:07.017 に答える