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

 

클래스 상속과 클래스 타입 참조변수 확인

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 public class GrandParents { String pStr = "grand parents"; GrandParent

blair6383.tistory.com

 

'언어 > 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
Posted by 知彼知己百戰不殆
,