menuhwang

[Java] 오버라이딩 (feat. 오버로딩) 본문

자바

[Java] 오버라이딩 (feat. 오버로딩)

menuhwang 2022. 9. 26. 18:30

오버라이딩


상속관계에서 부모의 함수를 덮어쓰는 것

 

 

 

방법


  1. 오버라이딩할 메서드에 @Override 어노테이션을 붙여준다.
  2. 메서드 이름과 파라미터가 상속클래스의 메서드와 똑같이 작성해야만 한다.
@Override 어노테이션은 꼭 필요한가?

어노테이션을 안 붙인다고 에러가 발생하는 것은 아니지만, Override 어노테이션이 붙은 메서드가 상속 클래스에 존재하지 않는다면 컴파일에러가 발생한다.

@Override 어노테이션을 붙여 오버라이딩한 메서드임을 표시해줄 수 있고, 오버라이딩할 메서드가 상속 클래스에 존재하는지 확인할 수 있다.

 

예시

class Person {
	public void greeting() {
		System.out.println("안녕하세요");
	}
}

class Programmer extends Person {
	@Override
	public void greeting() {
		System.out.println("안녕하세요. 개발자입니다.");
	}

	@Override // 상속 클래스에 해당하는 메서드가 없어 컴파일에러가 발생한다.
	public void hi() {
		System.out.println("안녕하세요.");
	}
}

public class Test {
	public static void main(String[] args) {
		Programmer programmer = new Programmer();
		programmer.greeting(); // 안녕하세요. 개발자입니다.
	}
}

 

 

오버로딩?


같은 함수 이름으로 파라미터의 데이터타입 또는 개수를 달리할 수 있다.

 

예시

// System.out.pringln() 오버로딩 예시
public void println() {
    newLine();
}

public void println(boolean x) {
    if (getClass() == PrintStream.class) {
        writeln(String.valueOf(x));
    } else {
        synchronized (this) {
            print(x);
            newLine();
        }
    }
}

public void println(char x) {
    if (getClass() == PrintStream.class) {
        writeln(String.valueOf(x));
    } else {
        synchronized (this) {
            print(x);
            newLine();
        }
    }
}

// ...

 

 

 

'자바' 카테고리의 다른 글

[Java] JVM, 자바 실행부터 메모리 구조까지  (0) 2022.12.11
[Java] static 이란?  (0) 2022.09.30
[Java] 상속  (0) 2022.09.26
[Java] 클래스와 객체  (1) 2022.09.22
[Java] 배열  (0) 2022.09.21
Comments