본문 바로가기

Java

[Java] overrding 오버라이딩

반응형
package org.opentutorials.javatutorials.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);
	}
}

class CalculatorChildClass extends Calculator {
	public void sum() {
		System.out.println("값 은 " + (this.left + this.right));
	}
}

public class CalculatorMain {

	public static void main(String[] args) {
		CalculatorChildClass c1 = new CalculatorChildClass();
		c1.setOperands(10, 20);
		c1.sum();

	}

}

 

출력값

sum() 이 Calculator 클래스와 CalculatorChildClass 클래스 안에 2개가 선언 되어있다.

상속된 CalculatorChildClass (자식 클래스) 안의 sum 이 호출된다.

이것을 overriding 이라 한다.

 

package org.opentutorials.javatutorials.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 CalculatorChildClass extends Calculator {
	public void sum() {
		System.out.println("값 은 " + (this.left + this.right));
	}
	
	public int avg() { //에러발생한다
		return (this.left + this.right) / 2;
	}
}

public class CalculatorMain2 {

	public static void main(String[] args) {
		CalculatorChildClass c1 = new CalculatorChildClass();
		c1.setOperands(10, 20);
		c1.sum();
		c1.avg();
	}

}

에러 발생한다.

부모의 메서드와 자식의 메서드의 return 타입 과 메서드 이름, 매개 변수의 데이터 타입과 순서와 갯수가 맞아야한다.

 

Super

package org.opentutorials.javatutorials.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 int avg() {
		return ((this.left + this.right) / 2);
	}
}

class CalculatorChildClass extends Calculator {
	public void sum() {
		System.out.println("값 은 " + (this.left + this.right));
	}
	
	public int avg() {
		return super.avg();
	}
}

public class CalculatorMain2 {

	public static void main(String[] args) {
		CalculatorChildClass c1 = new CalculatorChildClass();
		c1.setOperands(10, 20);
		c1.sum();
		System.out.println("실행 결과는 " + c1.avg());
	}

}

부모 클래스와 자식 클랙스인 CalculatorChildClass 의 avg() 메서드의 내용이 같으면 중복되니까

자식 클래스의 avg()메서드에 super.avg() 라고 적는다.

부모 클랙스의 avg()를 부른다.

반응형

'Java' 카테고리의 다른 글

[Java] 메서드 접근 제어자  (0) 2021.03.13
[Java] overloading 오버로딩  (0) 2021.03.11
[Java] 생성자, super  (0) 2021.03.09
[Java] 생성자  (0) 2021.03.08
[Java] this  (0) 2021.03.07