[Java] 메소드 오버라이딩(Method Overriding)

JUNBEOM PARK·2022년 2월 15일
0

🧨 Java

목록 보기
22/33
post-thumbnail

🤔 오버라이딩(Overriding) ?

상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것이다.

Java에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속 받는다.
상속받은 메소드는 그대로 사용해도 되지만, 필요에 따라 재정의하여 사용 할 수 있다
즉, 메소드 오버라이딩이란 상속 받은 부모 클래스의 메소드를 재정의 하여 사용하는 것을 의미한다.




😉 오버라이딩의 조건

  1. 부모클래스의 메소드 이름, 리턴 타입, 매개변수의 갯수, 자료형과 순서를 동일하게 하여 자식 클래스에서 작성해야 한다.
  2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
  3. 부모 클래스의 메소드 보다 더 큰 범위의 예외를 선언할 수 없다.



📃 메소드 오버라이딩 예제

마이너스 통장 예제를 통해 부모 클래스인 Account 클래스의 withdraw() 메소드를 자식 클래스인 MinusAccount 클래스에서 오버라이딩의 예를 보여준다.

Account.java


class Account {
	//(...)
    
	//출금하다.
	public int withdraw(int amount) throws Exception {
		if(balance < amount) {
			throw new Exception("잔액 부족");
		}
		balance -= amount;
		
		return amount;
		
	}
	
}


MinusAccount.java



public class MinusAccount extends Account {
	private int creditLine; //마이너스 한도
	
	public MinusAccount() {
		
	}

	public MinusAccount(String accountNo, String ownerName, int balance, int creditLine) {
		super(accountNo, ownerName, balance);
		this.creditLine = creditLine;
	}

	//Account 에 있는 withdraw 메소드는 적합 하지 않아
	//MinusAccount 클래스에서 재정의
	//=> 메소드 오버라이딩 : 부모의 메소드의 시그니쳐 일치(리턴형, 메소드이름, 파라미터(갯수, 데이터형), 예외관련)
	@Override
	public int withdraw(int amount) throws Exception {
		if(getBalance() + creditLine < amount) {
			throw new Exception("잔액 부족");
		}
		
		int balance = getBalance();
		setBalance(balance - amount);
		
		return amount;
	}
	
	
}




🗒 오버로딩 과 오버라이딩 차이


오버로딩(overloading)새로운 메소드를 정의하는 것이며,

오버라이딩(overriding)상속받은 기존의 메소드를 재정의하는 것이다.



참고자료
http://www.tcpschool.com/java/java_inheritance_overriding
https://blog.naver.com/PostView.naver?blogId=heartflow89&logNo=220961515893&redirect=Dlog&widgetTypeCall=true&directAccess=false
Do it 자바 완전 정복

profile
DB 엔지니어👍

0개의 댓글