// 상속 + 다형성 + 오버라이딩 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 |