私はJavaの初心者なので、これを理解するのを手伝ってください。
例えば
class a{...}
class b extends a{
public static void main(...){
a x = new a();
b y = new b();
a z = new b();
}
3 つのインスタンスの違いは何ですか? それぞれをいつ使用する必要がありますか?
編集:最後のステートメントを修正しました
コードを再利用a
するためのメソッドへのパラメータとして使用できます..つまり、(パラメータを使用して)メソッドを定義できるため、その派生クラス( 、..)のいずれでも機能します。a
b
例: Stream を読み取るためにこのメソッドを検討してください。
public void Read(Stream s)
{
//read s
}
deriving
のすべてのクラスでこのメソッドを再利用できるようになりました。Stream
Read(new FileStream(PATH));//read File
Read(new NetworkStream(URL));//read url
Read(new MemoryStream(object));//read memory object
a z=new b();
これは実行時ポリモーフィズムです
class a{...}
class b extends a{
public static void main(...){
a x = new a();
b y = new b();
a z = new b();
}
a x=new a();
→これは親クラスのオブジェクトです。
b y =new b();
y は子クラスのオブジェクトです。
a z=new b();
z 子インスタンスを参照する親クラスのオブジェクトです
親クラス内にいくつかの関数 (hello()) があり、子クラスが関数 (hello()) をオーバーライドする場合、z オブジェクトはその functions(); を使用するとします。子クラスでのみ、子内の他の関数はそのオブジェクト (z) で使用できません。
詳細については、リンクをクリックしてください
これはコンパイルされません
b z = new a();
ここであなたがおそらく意味したことは
a z = new b();
つまり、子クラスのオブジェクトを親クラスの参照に割り当てて、ポリモーフィズムを利用します。
基本的に、サブタイプ オブジェクトがスーパークラス参照に割り当てられている場合、ランタイム ポリモーフィズムにより、インスタンス メソッドのサブタイプのバージョンが呼び出されることが保証されます。つまり、それが親クラスでも定義されていて、もちろんオーバーライドします。そうでない場合、呼び出しは透過的にスーパークラス バージョンにフォールバックします。
CapitalCamelCase
余談ですが、授業などにご活用ください。
まず、Java の規則に従ってください。クラス名は大文字で始まり、メソッド/変数名はキャメルケースです。
class A{...}
class B extends A{
public static void main(...){
A x = new A();
B y = new B();
B z = new A(); // will not work
}
ステートメント 1 & 2 : A x = new A();
&B y = new B();
これはオブジェクトを作成する通常の方法です。タイプA(同じクラス)のオブジェクトを指すタイプAの参照があります。2枚目も同様です。
ステートメント 3:B z = new A();
サブクラス参照はスーパークラス オブジェクトで定義されていないメソッドを持つことができるため、サブクラス型の参照を使用してスーパークラスのオブジェクトを指すことはできないため、これは機能しません。
試してみてくださいA z = new B();
- それはポリモーフィズムと呼ばれます。詳細については、その用語を Google で検索してください。そこにはたくさんのツッツがあります。