public class Main {
public static void main(String[] args) {
ParentsClass pc = new ChildClass();
pc.a();
}
}
class ParentsClass {
public void a() {
System.out.println("Parensts a() call");
b();
System.out.println("Parents a()");
}
public void b() {
System.out.println("Parensts b() call");
a();
System.out.println("Parents b()");
}
}
class ChildClass extends ParentsClass{
public void a() {
System.out.println("Child a() call");
super.a();
System.out.println("Child a()");
}
public void b() {
System.out.println("Child b() call");
System.out.println("Child b()");
}
}
main함수에서 Parents 타입의 변수에 Child 클래스(Parents 상속)의 메소드 호출 시 호출 결과
Child클래스에서 super로 Parents 클래스의 a 메소드를 호출 했을 때 Parents 클래스의 a 메소드에서 b 메소드 호출.
머릿속으로는 Parents 클래스의 b 메소드가 호출될 줄 알았지만 Child 클래스의 b메소드가 호출되었다.
메소드 오버라이딩 하면 부모 클래스에서 호출하는 메소드가 자식 클래스에도 있으면 자식 클래스의 메소드가 우선 호출되는 것으로 보임.
❗️Child 클래스에서 b메소드를 주석처리 후 Parents 클래스의 b 메소드 안에 a()만 주석 처리 후 실행했더니
위와 같은 결과가 도출되었다.
메소드 오버라이딩이 없으면 부모 클래스에서 자식 클래스에 없는 메소드를 호출하면 부모 클래스의 메소드가 실행되었음
1년 동안 Java를 안 건드리다가 오랜만에 Java를 다시 보니 기억이 가물가물 ㅠㅠ
생성자 관련해서 예전에 썼던 글도 참고하면 좋을 듯
https://blair6383.tistory.com/249
'언어 > JAVA' 카테고리의 다른 글
class 초기화 블럭(initialization block) (0) | 2023.09.10 |
---|---|
인스턴스 변수와 this (0) | 2023.09.10 |
Math.random과 Random 클래스 차이 (0) | 2022.11.18 |
Scanner객체 NoSuchElementException 오류 (0) | 2021.06.20 |
Java 버전별 달라진 점. (0) | 2020.07.22 |