불로구
24강. (JAVA) 자바 - 부모 메소드 호출(super) & final 본문
자식 클래스에서 오버라이딩을 활용하여 부모 클래스의 메소드를 재정의하면, 부모 클래스의 메소드는 숨겨지고 재정의된 자식 클래스의 메소드가 사용된다.
여기서 부모 클래스의 메소드를 호출하는 방법은 없을까?
바로 "super" 키워드를 통해 부모 클래스의 메소드를 호출할 수 있다.
super.부모메소드()
super.부모메소드()
;
이렇게 m1();을 호출한 경우 재정의된 자식 클래스의 m1()이 호출되지만,
super.m1();을 호출한 경우 원래의 메소드인 부모 클래스의 m1()이 호출된다.
class P{
public void product(){
System.out.println("상품의 가격은 10만원 입니다.");
}
public void color(){
System.out.println("색상은 Yello 입니다.");
}
}
class C extends P{
@Override
public void product() {
System.out.println("상품의 가격은 10만원이 아니고, 30만원 입니다.");
super.product();
}
}
public class Test {
public static void main(String[] args){
P p = new P();
C c = new C();
p.product();
System.out.println("=====================");
c.product();
}
}
sd } }
이렇게 처음 자식 클래스인 C 클래스의 product()가 호출됨과 동시에 super.product()가 수행되어 부모 클래스의 product()도 실행이 되었다.
이렇게 부모 클래스의 함수를 호출할 수 있다면 인스턴스 변수도 불러올 수 있다고 볼 수 있겠죠?
class P{
int price = 300000;
}
class C extends P{
int price = 400000;
}
public class Test {
public static void main(String[] args){
P p = new P();
C c = new C();
System.out.println(p.price);
System.out.println("=====================");
System.out.println(c.price);
}
}
그냥 호출했을 때는 이렇게 출력이 되지만
class P{
int price = 300000;
}
class C extends P{
int price = 400000;
public int get(){
return super.price;
}
}
public class Test {
public static void main(String[] args){
P p = new P();
C c = new C();
System.out.println(p.price);
System.out.println("=====================");
System.out.println(c.get());
}
}
이렇게 get 함수를 생성하여 리턴 타입으로 super.price를 리턴한다면, 부모 클래스의 price 값을 얻어올 수 있다!
final
- final 키워드는 클래스, 필드, 메소드를 선언 시 사용할 수 있다.
- final은 최종 상태를 의미하며 수정이 불가능하다.
- 클래스 앞에 fianl을 선언하면 그 클래스는 부모 클래스가 될 수 없다.
사진처럼 final이 붙은 클래스를 상속하려고 했지만, 할 수 없다는 에러가 나타난다!
즉, final는 재정의를 할 수 없으며 부모 클래스의 메소드 앞에 final이 붙는다면 그 메소드는 재정의할 수 없다!
혹시나 궁금한 점은 댓글로 남겨주세요!
추천도서
'프로그래밍 > JAVA' 카테고리의 다른 글
26강. (JAVA) 자바 - 객체 타입 확인 (instanceof) (2) (0) | 2020.06.16 |
---|---|
25강. (JAVA) 자바 - 타입 변환 & 다형성 (1) (0) | 2020.06.16 |
23강. (JAVA) 자바 - 오버라이딩(Overriding) (0) | 2020.06.15 |
22강. (JAVA) 자바 - 상속(Inheritance) (0) | 2020.06.15 |
20강. (JAVA) 자바 - 필드 (0) | 2020.06.14 |