개요
메소드 오버라이딩은, 부모 클래스에서 정의된 메소드를 재정의하는 것입니다.
기본
어노테이션 @Override
를 선언하여 기존 클래스의 동일한 메소드를 재정의함을 명시합니다. 아래 소스 코드는 클래스 A를 상속받는 클래스 B에서 메소드 hello()를 오버라이딩했습니다.
클래스 A에서 정의한 hello()가 아닌 클래스 B에서 정의한 hello()가 실행되었습니다.
▶ 소스 코드
class A {
public void hello() {
System.out.println("Hello, A");
}
}
class B extends A {
@Override
public void hello() {
System.out.println("Hello, B");
}
}
class HelloWorld {
public static void main(String[] args) {
B b = new B();
b.hello();
}
}
▶ 출력 결과
Hello, B
super
오버라이딩한 메소드에서 부모 클래스의 메소드를 호출할 수도 있습니다. 메소드명 앞에 super 를 명시하여 부모 메소드를 호출할 수도 있습니다.
아래 소스 코드는 오버라이딩한 메소드 hello() 내부에서 부모 클래스의 메소드 hello()를 호출합니다.
▶ 소스 코드
class A {
public void hello() {
System.out.println("Hello, A");
}
}
class B extends A {
@Override
public void hello() {
super.hello();
System.out.println("Hello, B");
}
}
class HelloWorld {
public static void main(String[] args) {
B b = new B();
b.hello();
}
}
▶ 출력 결과
Hello, A
Hello, B
override override override .. ?
하나가 아닌 두 개 이상의 조상을 가질 땐 어떻게 될까요? 똑같습니다.
▶ 소스 코드
class A {
public void hello() {
System.out.println("Hello, A");
}
}
class B extends A {
@Override
public void hello() {
System.out.println("Hello, B");
}
}
class C extends B {
@Override
public void hello() {
System.out.println("Hello, C");
}
}
class HelloWorld {
public static void main(String[] args) {
C c = new C();
c.hello();
}
}
▶ 출력 결과
Hello, C
override super override super override .. ?
아래 코드는 어떻게 될까요? 클래스 B,C에서 메소드 오버라이딩 시 super 문법을 통해 각 클래스의 부모 메소드를 호출합니다.
▶ 소스 코드
class A {
public void hello() {
System.out.println("Hello, A");
}
}
class B extends A {
@Override
public void hello() {
super.hello();
System.out.println("Hello, B");
}
}
class C extends B {
@Override
public void hello() {
super.hello();
System.out.println("Hello, C");
}
}
class HelloWorld {
public static void main(String[] args) {
C c = new C();
c.hello();
}
}
▶ 출력 결과
Hello, A
Hello, B
Hello, C
'프로그래밍 > 기타 프로그래밍' 카테고리의 다른 글
[Python] nohup을 활용한 백그라운드 실행하기 (0) | 2024.08.09 |
---|---|
[python] Firebase Admin SDK child path 활용 데이터 읽기 (0) | 2024.01.02 |
[SAP/ABAP] EVENT DATA_CHANGED 활용하여 ALV 체크박스(checkbox) 클릭 시 바로 반영하기 (0) | 2023.12.14 |
[C++] vector <queue<int>> 그리고 vector<pair<int,int>> (1) | 2023.11.20 |
[SAP/ABAP] RETURN과 EXIT의 차이 (0) | 2023.11.13 |