1

メインメソッドでクラスAのprintメソッドにアクセスするには? mainメソッドで作成されたオブジェクトaとbの違いは?

  abstract class A {
        void print() {
            System.out.println("A");
        }
    }

    class B extends A {
        void print() {
        System.out.println("B");
        }
    }



    public class test {
        public static void main(String[] args) {
            B b = new B();
            A a = new B();
            b.print();
            a.print();
        }

    }
4

3 に答える 3

0

メインメソッドでクラスAのprintメソッドにアクセスするには?

メソッドをオーバーライドしたAのみの のインスタンスがないため、できません。B

mainメソッドで作成されたオブジェクトaとbの違いは?

それらは の異なるインスタンスですB

于 2013-02-08T09:23:16.487 に答える
0

a を new B() ではなく new A() に初期化するか、

また

たとえば、printA() というメソッドを B に追加します。

無効な printA() { super.print(); }

于 2013-02-08T09:25:11.507 に答える
0

どちらの場合も、overriden print()inclass Bが呼び出されます。

ケース 1: B b = new B();

このケースは簡単です。B参照でBオブジェクトを作成します。

ケース 2: A a = new B();

ここでは、 で作成B objectしていA referenceます。これは、オブジェクトまたは を多態的に作成することと呼ばれますcoding to an interface。でオーバーライド print()したようにclass B実行時に のオーバーロードされたメソッドclass Bが呼び出されます。

その他のオプション:

super キーワードを使用してクラス A の print メソッドを呼び出すクラス B のメソッドを作成します。

   class B extends A {
        public void someOtherMethod(){
            super.print();
         }
    }
   from main:
      B  b = new B();
      b.someOthermethod();
于 2013-02-08T09:25:14.010 に答える