を作成し、私は同じ参照して、異なるクラスからオブジェクト
Bがを拡張し、また、私は
a1 = new B();
を以下ならば何が起こるか
A a1 = new A();
A a2 = new B();
との違いを知りたいですありがとう。
を作成し、私は同じ参照して、異なるクラスからオブジェクト
Bがを拡張し、また、私は
a1 = new B();
を以下ならば何が起こるか
A a1 = new A();
A a2 = new B();
との違いを知りたいですありがとう。
あなたは、A a1
は、タイプAのオブジェクトへの参照である、とA()
がクラスBのサブクラスA場合A.
の新しいインスタンスを作成し、コンストラクタへの呼び出しで、最初の行A a1 = new A();
を取るためにa1 = new B();
と書くことができます。なぜなら、a1はタイプAのオブジェクトへの参照であり、新しいBはAという「契約」をフルフィルにするために必要なすべてのメソッドを持つからです。しかし、特定のものを直接呼び出すことはできません参照はタイプAであるため、
BTWのように、このトピックの非常に短い説明であり、何らかのtutoria l。
編集:ここでは類推/例です:(FerrariWithSunRoof
はFerrari
を拡張)
Ferrari A = new Ferrari();
Ferrari B = new FerrariWithSunRoof();
BがFerrari
として参照されているので、あなたは、たとえば、B.openSunroof()
を呼び出すことができませんでしたので、参照は概念がありません。 (実際のインスタンスにサンルーフがある場合でも)。そのためには、あなたがFerrariWithSunRoof
、すなわちとしてそれを参照する必要があると思います。:
FerrariWithSunRoof B = new FerrariWithSunRoof();
ありがとうございますので、A a1 = new A(); A a1 = new B()である。違いは何ではない、私は私のIDEで試してみたし、違いは見えませんでした。 – Ala
最初のインスタンスはAの新しいインスタンスを作成し、2番目のインスタンスはBの新しいインスタンスを作成します。 –
あなたはA1またはB1オブジェクトにクラスAまたはBのオブジェクトを使用して変更することができます。あなたはまず、私がread on OOP inheritance and interfacesにあなたをお勧めしますクラスA
Class A Class B
.move() (.move()) inheritance
.walk() (.walk()) inheritance
.run() (.run() ) inheritance
.jump()
.dance()
if you have an object like a1= new B() or a1=new A();
it works good for them both:
a1.move()
a1.run()
but this works just a1= new B()
a1.jump()
答えをありがとう!しかし、a1.jumpが動作することは確かですか? a1はAとして参照されます!私は例で試してみましたが、悲しいことにそれは仕事をしませんでした。これも上記のスティーブの答えと矛盾しています! – Ala
には存在しないよりも、クラスBからの新しいメソッドを使用しようとすると問題があります。
今質問します。 A a1 = new A();
は、A
のために定義されたコンストラクタを呼び出し、タイプA
の新しいオブジェクトを生成し、それ自身の参照をメモリに格納します。あなたがタイプA
とB
A
を拡張するなどa2
を定義しているので、 A a2 = new B();
しか行うことなく、A
で定義されたメソッドにアクセスする必要があります、しかし、ちょうどa1
のように、新しい参照してa2
をタイプB
の新しいオブジェクトa2
を作成します。明示的なキャスト
a1 = new B();
は、単にa1を新しいオブジェクトで上書きします。 ランダムアドレスでa1がcurrent_a1としてメモリに格納されていると仮定します。これは、a1 = new A();
でプログラムを作成したとき、プログラムがa1 = new B();
に達するとcurrent_a1はnew B()
のアドレスに設定され、最終的には、それ。
例:
A a1 = new A(); a1 -> address_1
a1 = new B(); a1 -> address_2
address_1 is freed from memory if it isn't being pointed to/"used" anywhere else
私はこれが役に立てば幸い!そして、次回は、質問をする前に、より深い検索をしてください。
何が起こっているか知りたい場合は、log/printステートメントで簡単なテストを実行して実行してみてください。また、OOPの基本原則である継承と多型についても読んでおく必要があります。 – lax1089