728x90
반응형
자바의 상속을 통해서 상위 클래스의 기능을 하위 클래스로 물려줄 수 있었습니다.
하지만, 상속을 하게 되면 하위 클래스는 상위 클래스의 메소드 변경 없이 단순 기능 추가만 할 수 있습니다.
만약 그래야 한다면 제약이 상당할 것입니다.
이런 제약을 벗어나기 위해서 하위 클래스가 부모 클래스의 기본적인 동작을 변경할 수 있어야 하는데
이런 맥락에서 도입된 기능이 메소드 오버 라이딩(overriding)입니다.
메소드 오버 라이딩은 재정의, 새롭게 정의한다는 뜻을 가지고 있습니다.
즉, 부모 클래스에 선언한 메소드를 자식 클래스에서 동일한 메소드명으로 재 정의 해주면,
main에서 이 메소드를 호출했을 때, 부모 클래스가 아닌 자식 클래스에 있는 메소드를 호출하게 끔하는 것입니다.
package Inferitance;
class Calcul_test {
int left, right;
public Calcul_test(int left, int right)
{
this.left = left;
this.right = right;
}
public void Sum()
{
System.out.print(this.left + this.right);
}
public double Avg()
{
return (this.left + this.right) / 2;
}
}
class Calcul_test_2 extends Calcul_test {
public Calcul_test_2(int left, int right)
{
super(left, right);
}
public void Sum()
{
super.Sum();
System.out.print("은" + " " +this.left +"과 " + this.right + "를 더한 값");
}
public double Avg()
{
double avg = super.Avg();
return avg * 2;
}
public void Mul()
{
System.out.println(this.left * this.right);
}
}
public class Overriding_2 {
public static void main(String[] args) {
Calcul_test Cal = new Calcul_test(60, 30);
System.out.print("Cal의 Sum : ");
Cal.Sum();
System.out.println("\nCal의 Avg : " + Cal.Avg());
Calcul_test_2 Cal_2 = new Calcul_test_2(40, 20);
System.out.print("Cal_2의 Sum : ");
Cal_2.Sum();
System.out.println("\nCal_2의 Avg : " + Cal_2.Avg());
System.out.print("Cal_2의 Mul : ");
Cal_2.Mul();
}
}
위는 간단한 메소드 오버 라이딩 예제입니다.
부모 클래스에 있는 Sum(), Avg()를 자식 클래스에서 다시 재정의하면서 메소드를 조금 더 구체화시켜주었습니다.
메소드 재정의 시 super라는 함수가 필요합니다.
super는 상속의 생성자 부분에서도 잠깐 다뤘던 내용인데, 부모 클래스를 뜻합니다.
따라서, super.Sum(), super.Avg() 형태로 사용하면, 부모 클래스에 있는 기능을 실행시키고
사용자는 그 내용에다가 필요한 부분을 더 추가할 수 있습니다.
메소드 오버 라이딩에는 조건이 있는데,
1) 재정의할 메소드의 명, 2) 메소드의 retrun 타입, 3) 매개변수의 순서, 갯수가 부모와 자식 클래스에서 동일해야 합니다.
이렇게 해서 자바의 메소드 오버 라이딩에 대해 알아보았습니다.
'JAVA' 카테고리의 다른 글
JDK 다운, PATH 환경 설정 - 공부하는 도비 (0) | 2023.01.26 |
---|---|
자바 상속 기초 4) 메소드 overloading - 공부하는 도비 (0) | 2022.04.02 |
자바 상속 기초 2) super - 공부하는 도비 (0) | 2022.04.02 |
자바 상속 기초 1) - 공부하는 도비 (0) | 2022.04.02 |
자바 생성자(constructor)와 초기화 - 공부하는 도비 (0) | 2022.03.04 |