Java--抽象クラスおよびサブクラスのインスタンス化順序とメソッド呼び出し順序テスト

2099 ワード

移動https://blog.csdn.net/wo541075754/article/details/51523639、作者に感謝
抽象クラス:
package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public abstract class Fruit {

    protected Fruit(){
        System.out.println(" ");
        toPlant();
        toEat();
    }

    protected abstract void toEat();

    protected abstract void toPlant();

}


サブクラスBanana:
package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public class Banana extends Fruit{

    protected Banana(){
        System.out.println("  Banana");

    }

    @Override
    protected void toEat() {
        System.out.println("Eat a Banana");
    }

    @Override
    protected void toPlant() {
        System.out.println("Plant a Banana");
    }

}


サブクラスOrange:
package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public class Orange  extends Fruit{

    public Orange() {
        System.out.println("  Orange");
    }

    @Override
    protected void toEat() {
        System.out.println("Eat a Orange");
    }

    @Override
    protected void toPlant() {
        System.out.println("Plant a Orange");
    }

}


テストクラス:
package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public class TestFruit {
    public static void main(String[] args) {
        new Banana();
        new Orange();
    }
}


結果印刷を実行するには、次の手順に従います.
 
Plant a Banana
Eat a Banana
  Banana
 
Plant a Orange
Eat a Orange
  Orange

結果分析

  • サブクラス、抽象クラスの構造方法の印刷結果を表示すると、サブクラスをインスタンス化する際に親クラスをインスタンス化することがわかります.
  • は、抽象クラスの構築方法において、自分が実装していない抽象メソッドを呼び出すと、対応するインスタンス化されたサブクラスがこのメソッドを実装し、抽象クラスがインスタンス化された後、サブクラスがインスタンス化されない前に、抽象クラスがサブクラス実装の抽象メソッドを呼び出すことができる.
  • 異なるクラスインスタンス化印刷の異なる抽象的な方法が実現され、javaマルチステートの表現形式である.