본문 바로가기

JAVA/DAY 15 _ 23.09.06

Overiding

// 상속 + 다형성 + 오버라이딩 TIP : 문법과 런타임을 다르게 생각하자!

class AAA{
	
	int a1;
	int a2;
	
	void print() {
		System.out.println("AAA의 print메서드란다");
	}

	void qqq() {
		System.out.println("AAA의 qqq메서드");
	}

}

class BBB extends AAA{
	
	void test() {
		System.out.println("BBB의 test메서드란다");
	}
	
	// ★★★ 오버라이딩 문법 --> 하위 클래스가 상위 클래스의 메서드를 '재정의'하는 과정
	//--> 상위 클래스의 메서드와 동일한 이름, 매개변수 목록, 반환 유형을 가져야 함 ★★★
 	// (메소드명, 파라메터, 리턴타입)
	void print() {
		System.out.println("BBB의 AAA로부터 상속받은 print메서드");
	}
	
	
	void print(int a) {	 // 이건그냥 BBB의 메소드. 오버라이딩 된게 아님!!
		
	}
	
	
}

 

// 상속개념 review

AAA a = new AAA();
a.print();				
// 문법적으로! 가능한 코드
// 출력 : AAA의 print메서드란다

// a.test();			
//--> 문법적으로! 변수의 타입 -> AAA를 따라가야 하므로 BBB의 test메서드는 호출 못함


BBB b = new BBB();
b.test();
// 출력 : BBB의 test메서드란다

b.print();				
// 문법적으로! AAA껄 상속 받았으니까 BBB에 print메서드가 없어도 쓸 수 있지. --> AAA의 print메서드 호출
// 오버라이딩 돼있으면? 메서드가 있으니까 그냥 쓸 수 있지.
// 출력: BBB의 AAA로부터 상속받은 print메서드

 

// 다형성을 적용해보자(위는 그냥 상속개념.)

AAA ref = new BBB();	// 원래는 안되는데, 다형성을 적용해서 AAA가 BBB를 생성했다.

ref.qqq();				
// 문법적으로! 변수의 타입 -> AAA를 따라가서 AAA의 qqq를 호줄해야겠지.
// 출력 : AAA의 qqq메서드

ref.print();			
// 문법적으로! 변수의 타입 -> AAA를 따라가서 AAA의 print를 호줄해야겠지.
// 런타임은!! (오버라이딩 한 상태에서는 ->) b.print();가 출력됨.
// 출력 : BBB의 AAA로부터 상속받은 print메서드

// if) 오버라이딩을 지워? ---> AAA의 print메서드를 호출하게됨. ★★★★

'JAVA > DAY 15 _ 23.09.06' 카테고리의 다른 글

interface 활용ex - self  (0) 2023.09.14
Abstract Class_ 스타ex활용  (0) 2023.09.14
상속_array활용3  (0) 2023.09.13
상속_array활용2  (0) 2023.09.12
상속_array활용  (0) 2023.09.12