3

Java は初めてで、まだ new キーワードと継承に苦労しています:

public class A1 {
    void a_method (){
        System.out.println("Inside A1 method");
    }
}

public class A2 extends A1{
    void a_method(){
        System.out.println("Inside A2 method");
    }
}

public class TestA1A2 {

    public static void main(String[] args) {

        A1 a1 = new A1();
        A1 a2 = new A2();  //not sure if it created object of A1 or A2
        A2 a3 = new A2();

        a1.a_method();
        a2.a_method();
        a3.a_method();

    }
}

新しいキーワードを理解するのに苦労しています。上記のコードの場合:

A1 a2 = new A2();  //not sure if it created object of A1 or A2

a2 は A1 または A2 のオブジェクトになりますか? 出力から、A2 のメソッドが呼び出されたことがわかりますが、実際には新しいキーワードを取得できません。また、A2 は A1 を拡張しているので、A1 のメソッドを呼び出すことは可能ですか??

4

8 に答える 8

6
A1 a2 = new A2(); 

このコードは A2 オブジェクトを作成しますが、a2 でのみ A1 クラスのメソッドにアクセスできます。メソッドが A2 でオーバーライドされる場合、これは呼び出される A2 のメソッドです。

于 2013-05-19T14:06:53.163 に答える
2

「new A2()」と言ったので、新しい A2() オブジェクトを作成しました。A2 も A1 であるため、A1 のように参照できます。

A1 a1 = new A2();
A2 a2 = new A2();

上記の例では、a1 で、a1 で A1 のすべてのメソッドを呼び出すことができます。a2 の場合、A1 のメソッドを継承しているため、a1 と a2 のすべてのメソッドを呼び出すことができます。

于 2013-05-19T14:05:44.560 に答える
2

これはポリモーフィズムと呼ばれます。A2extends以来、 asと をA1宣言すると、内部のオーバーライドされていないすべてのメソッドと内部のすべてのオーバーライドされたメソッドにアクセスできます(オーバーライドするときにアノテーションを使用することをお勧めします)。A1A2A1A1A2@Override

この場合、A2オーバーライドa_method()するため、のバージョンにa2.a_method()アクセスすることになります。A2'sa_method()

javadoc からの説明:

多型の辞書的定義は、生物または種が多くの異なる形態または段階を持つことができる生物学の原則を指します。この原則は、オブジェクト指向プログラミングや Java 言語などの言語にも適用できます。クラスのサブクラスは、独自の独自の動作を定義しながら、親クラスの同じ機能の一部を共有できます。

于 2013-05-19T14:08:29.643 に答える
1

A1 は A2 の親クラスであり、

A1 a2 = new A2();

親クラスが A1 である A2 のインスタンスを作成します。ただし、A2 は A1 から継承されているため、a2 も A1 です。

于 2013-05-19T14:07:33.037 に答える
0

A2object(extended) A1object です。A2 したがって、としてもとしても使用できますA1

于 2013-05-19T14:06:19.963 に答える