第3章内容(3)

9537 ワード

マルチファンクション:使いやすい
オブジェクト向けのマルチフォーマットコピーでは、オーバーライドとオーバーロードを使用できます.
オーバーライド:親が持つメソッドがクラスに再定義され、使用されることを意味します.
(メソッドの名前とパラメータの数とタイプは同じで、主に親の動作を継承するサブクラスを変更するために使用されます.)
オーバーロード:メソッド名が同じで、パラメータのタイプと数が異なる
(異なる戻り値のみを持つオーバーロードは作成できません.)
コードでoverridingとoverloadingをチェックしましょう.
オーバーロードとオーバーロードの簡単な例
package jv.part03

public class Animal{
    public String name;
    
    public void showName(){
    	System.out.println("안녕 나는 " + name +"이야");
    }
}
[図1.1]Animal.java
package jv.part03

public class Mouse extends Animal{
    public String habitat;
    
    public void showHabitat(){
    	System.out.println(name + "는 " + habitat +"에 살아");
    }
    //오버라이딩 - 재정의 : 상위클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트
    public void showName(){
    	System.out.println("응 안 알려줄거야");
    }
    
    //오버로딩 중복정의 : 같은 메서드 이름, 다른 인자 리스트
    public void showName(String yourName){
		System.out.println("안녕 "+yourName+"아 나는 "+name+"이야");
    }
}
[図1.2]Mouse.java
package jv.part03
public class Driver{
	public static void main(String[] args){
    	Mouse jerry = new Mouse();
        
        jerry.name = "제리";
        jerry.habitat = "쥐구멍";
        
        jerry.showName();
        jerry.showName("톰");
        jerry.showHabitat();
        
        Animal mickey = new Mouse();
        
        mickey.name = "미키";
        mickey.showName();
    }
}
[図1.3]Driver.java
Driver.Javaを実行した結果は次のとおりです.

jerry.showName()とjerry.showName(「トム」)はリロード出力によって異なり、オブジェクト参照変数タイプがAnimalのmickeyのshowName()はMouseオブジェクトのshowName()として実行されていることがわかります.この点は、メモリに格納されている様子から分かりやすい.
多形性とメモリ
Driver.[図1.4]ではjavaのプライマリメソッドが終了する前のメモリを示す.

[図1.4]Driver.Javaを実行するメモリ
[図1.4]では、Mouseクラスが親クラスAnimalクラスのshowName()メソッドとshowName(yourName:String)メソッドを上書きしていることに注目してください.jarry.showName()を実行すると、Animalオブジェクト上のshowName()メソッドがMouseオブジェクト上のshowName()メソッドによって再定義されるため、再定義メソッドが呼び出されます.
jarry.showName(「トム」);実行すると、上書きされたshowName(yourName)メソッドが呼び出されます.
最も注目される部分はmickeyのshowName()メソッドが実行した結果です.前述したように、AnimalオブジェクトのshowName()はMouseオブジェクトのshowName()によって隠されているため、オブジェクト参照変数タイプがAnimalのmickeyでも再定義のメソッドが呼び出されます.
親クラスタイプのオブジェクトが変数を参照する場合でも、子クラスはオーバーライド(再定義)メソッドを呼び出します.
コメントブログ