클래스 정리 순서 (방법의 실행 순서)

3835 단어 메서드

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.

방법의 집행 순서는 클래스의 호출 순서와 상반된다.
먼저 계승류를 집행하는 방법, 그리고 파생류를 집행하는 방법, 마지막으로 기류를 집행하는 방법.

좋은 웹페이지 즐겨찾기