类的清理顺序(方法的执行顺序)

package com.payton.polymorphism;

class Characteristic {
    private String s;
    
    Characteristic(String s){
        this.s = s;
        System.out.println("Create Characteristic " + s);
    }
    
    protected void dispose() {
        System.out.println("finalizing Characteristic.");
    }
}

class Description {
    private String s;
    
    Description(String s){
        this.s = s;
        System.out.println("Create Description " + s);
    }
    
    protected void dispose() {
        System.out.println("finalizing Description.");
    }
}

class LivingCreature {
    private Characteristic p = new Characteristic("is alive");
    private Description t = new Description("Basic Living Creature");
    
    LivingCreature(){
        System.out.println("LivingCreature()");
    }
    
    protected void dispose() {
        System.out.println("LivingCreature dispose.");
        t.dispose();
        p.dispose();
    }
}

class Animal extends LivingCreature {
    private Characteristic p = new Characteristic("has heart");
    private Description t = new Description("Animal not vegetable");
    
    Animal(){
        System.out.println("Animal()");
    }
    
    protected void dispose() {
        System.out.println("Animal dispose.");
        t.dispose();
        p.dispose();
        super.dispose();
    }
}

class Amphibian extends Animal {
    private Characteristic p = new Characteristic("can live in the water");
    private Description t = new Description("Both water and land");
    
    Amphibian(){
        System.out.println("Amphibian()");
    }
    
    protected void dispose() {
        System.out.println("Amphibian dispose.");
        t.dispose();
        p.dispose();
        super.dispose();
    }
}

public class Frog extends Amphibian{
    private Characteristic p = new Characteristic("Croaks");
    private Description t = new Description("Eats Bugs");
    
    Frog(){
        System.out.println("Frog()");
    }
    
    protected void dispose() {
        System.out.println("Frog dispose.");
        t.dispose();
        p.dispose();
        super.dispose();
    }

    public static void main(String[] args) {
        Frog frog = new Frog();
        System.out.println("Bye!");
        frog.dispose();
    }

}

结果:
Create Characteristic is alive
Create Description Basic Living Creature
LivingCreature()
Create Characteristic has heart
Create Description Animal not vegetable
Animal()
Create Characteristic can live in the water
Create Description Both water and land
Amphibian()
Create Characteristic Croaks
Create Description Eats Bugs
Frog()
Bye!
Frog dispose.
finalizing Description.
finalizing Characteristic.
Amphibian dispose.
finalizing Description.
finalizing Characteristic.
Animal dispose.
finalizing Description.
finalizing Characteristic.
LivingCreature dispose.
finalizing Description.
finalizing Characteristic.


方法的执行顺序和类的调用顺序相反。
先执行继承类的方法,再执行派生类的方法,最后执行基类的方法。

你可能感兴趣的:(方法)