프로그래밍 언어/Java

[java] 8강 Overriding 이란?

happy_life 2021. 11. 13. 11:25

Overriding

상속받은 자식 클래스가 부모 클래스의 메소드를 변경할 수 있는 것.

 

 

코드 예제

 

 

 

class cal1{
	int left, right;
		
	public void cal1(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void setOprands(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void sum() {
		System.out.println(this.left + this.right);
	}
}
	
class Sustractcal extends cal1 {
		public Sustractcal(int left,int right) {
		this.left = left;
		this.right = right;
	}
	
	public void substract() {
		System.out.println(this.left - this.right);
	}
		
}
	

public class cal{

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

substractcal 은 cal1을 상속받은 자식 클래스 입니다. 

자식 클래스인 substractcal에는 sum 메소드가 없습니다.

따라서 java는 자연스럽게 부모 클래스로 올라가 sum함수를 찾게됩니다. 

 

그렇다면 이 예제에서 Overriding 개념을 적용하면 어떻게 될까요?

바로 위와 같은 코드를  추가해서 재정의하면 됩니다. 

 

추가 코드 예제

class cal1{
	int left, right;
		
	public void cal1(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void setOprands(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void sum() {
		System.out.println(this.left + this.right);
	}
}
	
class Sustractcal extends cal1 {
		public Sustractcal(int left,int right) {
		this.left = left;
		this.right = right;
	}
		public void sum() {
			System.out.println("Substractcal에서 재정의 된 "+(this.left + this.right+"입니다"));
		}
	
	public void substract() {
		System.out.println(this.left - this.right);
	}
		
}
	

public class cal{

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

 

 

Overriding 의 조건

 

1. 부모 메소드의 형식과 자식 메소드의 형식이 같아야 합니다.

 형식: 1) 메소드의 이름 2) 메소드 매개변수의 숫자와 데이터 타입 그리고 순서 3) 메소드의 리턴 타입