[JAVA]overriding


クリエイティブ継承


子メソッドから親メソッドで定義されたメソッドをロードし、新しい定義の機能を追加する場合は、どうすればいいですか?
class Calculator{
	int left,right;

	public void setOperands(int left, int right) {
		this.left=left;
		this.right=right;	
	}
	public void sum() {
		System.out.println(this.left+this.right);
		
	}
	public void avg() {
		System.out.println((this.left+this.right)/2);
		
	}
	
	}

class SubstractionableCalculator extends Calculator{
	//상위클래스에 있는 메소드sum을 불러와서 새로운 기능을 추가하게 된다면
	//상위클래스에 있는 메소드가 아닌 하위클래스 메소드sum을 실행시키게된다.
	public void sum() {
		System.out.println("실행 결과는" + (this.left+this.right)+"입니다.");
	}
	public void substract() {
		System.out.println((this.left)-(this.right));
	}
	
}

public class CalculatorDemo{

	public static void main(String[] args) {
		//SubstractionableCalculator의 생성자 c1호출
		SubstractionableCalculator c1=new SubstractionableCalculator();
		c1.setOperands(10, 20);
		c1.sum();
		c1.avg();
		c1.substract();
	}

}
実行結果:
実行結果は30です.
15
-10
次のように、子クラスが親クラスにロードされ、再定義されているメソッドの合計を示します.
メソッドとは、親ではなく子で実行されます.
親を継承するメソッドとメソッドオーバーライドと呼ばれるメソッドを再定義して使用します.

上書き条件

  • メソッドの名前
  • メソッドパラメータの数、データ型、および順序
  • 戻りタイプ
  • メソッド
  • 上記メソッド形状を定義する事項をメソッドの署名と総称する.
    次の例は正しくありません.
    メソッドを上書きするには、同じ戻りフォーマットが必要です.

    戻りフォーマットを同じにすることで、次の方法で上書きできます.

    ただし、return値を表示すると、重複していることがわかります.ジェネレータと同様にsuperを使用すると問題を解決できます.
    class Calculator1{
    	int left,right;
    
    	public void setOperands(int left, int right) {
    		this.left=left;
    		this.right=right;	
    	}
    	public void sum() {
    		System.out.println(this.left+this.right);
    		
    	}
    	
    	public int avg() {
    		return ((this.left+this.right)/2);
    		
    	}
    	
    	}
    
    class SubstractionableCalculator1 extends Calculator1{
    
    	public void sum() {
    		System.out.println("실행 결과는" + (this.left+this.right)+"입니다.");
    	}
    	//super를 사용함으로써 return값의 중복제거
    	public int avg() {
    		return super.avg();
    	}
    	public void substract() {
    		System.out.println((this.left)-(this.right));
    	}
    	
    }
    
    public class CalculatorDemo2{
    
    	public static void main(String[] args) {
    		//SubstractionableCalculator의 생성자 c1호출
    		SubstractionableCalculator1 c1=new SubstractionableCalculator1();
    		c1.setOperands(10, 20);
    		c1.sum();
    		System.out.println("실행 결과는" +c1.avg());
    		c1.substract();
    	}
    
    }