평행코드

오버라이딩과 오버로딩 본문

Java

오버라이딩과 오버로딩

나의 오류는 누군가 겪었던 오류 2023. 9. 13. 08:56
오버라이딩 (Override)

자식 클래스가 상속 받은 부모 메소드를 재작성 하는 것

부모가 제공하는 기능을 후손이 일부 고쳐 구현부만 다르게해서 재정의 할 수 있음

자식 객체를 통한 실행 시 후손 것이 우선권을 가진다

 

데이터를 어떻게 표현할지 커스터마이즈 할 수 있다

숨겨야하는 민감한 정보를 감출때 사용하면 좋음!

 

오버라이딩의 성립 조건

1. 메소드 이름이 동일해야한다

2. 매개변수의 개수, 타입이 동일해야한다

3. 리턴 타입이 동일해야한다

 

주의) private 메소드 오버라이딩불가, final 메소드 오버라이딩 불가

 

final 예약어

fianl 재정의를 불가능하게 할 수 있음

public final String info() {
	return type + " " + name + " " + age + " ";
}

public class Dog extends Animal{
	@Override
	public String info() { // !!! Cannot override the final method from Animal
		return "강아지 " + super.info();
	}
}

 

equals() 메서드 재정의
@Override
	public boolean equals(Object o) {
		// 다형성 부모자식관계에 있는 클래스는 부모타입의 변수에 자식객체를
		// 저장할 수 있는 것
		// 객체의 일치 여부를 확인하는 로직을 작성
		// 일치하면 true를 반환, 불일치하면 false를 반환
		// 객체의 필드에 저장된 값을 기준으로 비교를 한다.
		// this에 있는 필드 값이랑, 매개변수의 object o값을 비교
		
		Student s = (Student)o;
		if(this.name.equals(s.name) 
				&& this.getAge()== s.getAge()
				&& this.getAddress().equals(s.getAddress())) {
			return true;
		}
		return false;
	}
toString() 메서드 재정의
public String toString() {
		return getName() + getAge() + getAddress() + getPhone()
		+ getGender() + grade + major;
	}

 

오버로딩(Overloading)

한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것

 

* 성립조건

 

같은 메소드 이름이지만 다른 매개변수 선언부(매개변수 타입, 개수, 순서)

 주의) 메소드의 리턴타입은 오버로딩 조건과 관계 없음

 

오버라이딩(Overriding) 오버로딩(Overloading)
하위 클래스에서 메소드 정의 같은 클래스에서 메소드 정의
메소드 이름 동일
매개변수 동일(개수, 타입)
리턴 타입 동일
메소드 이름 동일
매개변수 다름(개수, 타입)
리턴 타입 상관 없음
자식 메소드의 접근 범위가
부모 메소드의 접근 범위보다
넓거나 같아야 함
접근 제어자와 상관 없음
자식 메소드의 예외 수가
부모 메소드의 예외 수보다 적거나
범위가 좁아야  함
예외처리자와 상관 없음
기존에 없던 새로운 메서드를 정의하는 것 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것

 

'Java' 카테고리의 다른 글

Iterator , 동등성비교(equals @Override)  (0) 2023.09.20
다형성 추상클래스와 인터페이스  (0) 2023.09.17
상속이란? 그리고 super  (0) 2023.09.12
객체배열  (0) 2023.09.11
생성자(Constructor)  (0) 2023.09.07