0

私はクラスAを持っています

public class A{

   public void doWork(){
              ..............
              .............
   }

}

パブリック クラス B が A を拡張するようになりました

public class B extends A{

   @override
   public void doWork(){
          ............
          ............
   }

}

ここで、Public クラス C が B のオブジェクトを作成し、それをクラス D のメソッドに渡します。

import xxx.xxx.B;
import xxx.xxx.D;

public class C{
     B b= new B();
     D d = new D();

     d.method(b);
}

現在、クラス D は型 A の引数をそのメソッドに取り、それを操作します。

public class D{

   public void method(A a){
      ..........
      ..........
   }

}

実際には許可されていますが、なぜ許可されているのか理解できません。クラス D の method() は、タイプ A のオブジェクトを取る必要があります。助けてください。

4

6 に答える 6

4

Bの拡張ですA。たとえば、クラスAnimalとクラスを取りDog extends Animalます。DogまだAnimalです。同じことがあなたの状況にも当てはまります。

于 2013-09-28T14:58:01.187 に答える
3

そのように使用する場合extends、クラスBは「クラス」でありA、より特殊化されたバージョンであると言っています。たとえばShape、 があり、次にCircle extends Shape. Circle は、 Shapeそれの単なる専門化です。それがサブクラス化と呼ばれる理由です。(通常) 一般的なクラスのサブセットである、より具体的なクラスを作成しています。

「Is a」は、おそらく継承における最も基本的な関係です

于 2013-09-28T14:58:12.610 に答える
2

共分散

Cat が Animal のサブタイプである場合、タイプ Animal の式を使用できる場合はいつでも、タイプ Cat の式を使用できます。

あなたのB is extends A。だから、Bまた、のプロパティを持っていますA

あなたは A を期待しています..したがってB、 の特性を持つものを受け取ることで満足しますA

于 2013-09-28T14:59:05.590 に答える
1

これは、オブジェクト指向プログラミングの重要な部分であるポリモーフィズムの概念です。B のインスタンスは A から拡張されるため、A のインスタンスとして多態的に扱うことができます。

注: 逆は当てはまりません。A のインスタンスを B のインスタンスとして扱うことはできません

于 2013-09-28T14:58:42.743 に答える
0

クラス D の Method() は、タイプ A または A のサブタイプのオブジェクトを取ることができます。この場合、B は A を拡張するため、完全に機能します。http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.htmlを見てください。

于 2013-09-28T15:02:44.990 に答える
0

Dのmethodは、A をサブクラス化する任意のクラスを取ることができます。

型の安全性に注意してください。現在、methodD では、パラメーターで呼び出すすべてのメソッドが A の実装を実行します。

于 2013-09-28T14:59:52.993 に答える