상속 (inheritance)
말 그대로, 부모(상위)의 클래스를 자식(하위)클래스가 상속 받는 것이다.
상속하는 클래스 : 상위 클래스,parent class, super class
상속받는 클래스 : 하위 클래스, child class, sub class
상속을 구현하는 경우
상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 가진다.
하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 가진다
== 한마디로? 자식이 더 쌘놈이다!!
extends 키워드로 구현가능
생성자
부모 클래스를 상속받은 자식 클래스가 있다면 자식클래스를 heap 메모리에 올렸을때
부모의 생성자가 먼저 호출되고 자식 생성자가 호출되는 것을 확인할 수 있다!!
부모의 클래스 메서드 호출
가능하다.
다만 여기까진 알지만 이제 Override와 OverLoading 을 알아보자
오버라이드(Override)
쉽게 설명하면 Override는 부모 메서드를 재정의 하는것이다
딱 봐도 한눈에 알수있다.
@Override = 어노테이션이라 불리며, 컴퓨터에게 이것은 오버라이드 한것이야라고 알려주는 것
오버로딩(OverLoading)
이제 OverLoading을 알아보자
메서드 이름은 같으나 매개변수를 다르게 지정해 같은 이름으로 여러개를 만들수 있다!!
매개변수에 1f를 넣었으니 float값이 나오겠죠?
SUPER키워드
(Super~~~ 이라하면 웬지 원피스가 생각난다 ㅇㅅㅇ)
SUPER생성자
① 하위클래스에서만 쓸 수 있으며 상위 클래스에 대한 참조값(= 생성된 상위 클래스 인스턴스 참조값을 가진다.)이다.
② 한마디로 super() = 부모클래스의 생성자 또는 메서드 호출 , 맴버변수에 접근이 가능하다! 는 것이다.
③ 하위클래스에서 명시적으로 상위 클래스의 생성자를 호출하지 않으면 컴퓨터가 알~아~서~ super()가 호출된다.
(3번은 부모 클래스는 반드시 기본 생성자가 있어야 한다!!)
④ 3번의 기본 생성자가 아닌 다른생성자가 있다면? 하위 클래스의 생성자에서 super를 사용하여 명시적으로 부모 생성자를 호출 하여야겠죠오~?
(안하면? 에러죠 뭐 부모class를 메모리에 같이 올라가질 못했음)
예시)
SUPER메소드
super의 점연산자를 사용해 메소드를 불러올수 있다.
SUPER vs THIS
super = 부모를 의미한다.
this = 자기 자신을 의미한다.
따라서 결론
우리가 자식 클래스를 new 키워드로 인스턴스를 생성하면 부모클래스도 같이 반드시! 메모리에 올라가도록 해줘야
오류가 뜨지 않는다.(= 부모 클래스를 사용가능하다)
상속의 주의점!!!!!!!!!!!!!
포함 관계
차와 엔진의 관계를 살펴봅시다.
엔진 <ㅡ 차 / 차가 엔진을 상속받는다? 아니다.
차 <ㅡ 엔진 / 엔진이 차를 상속받는다도 아니다.
차와 엔진은 포함관계이므로 이 둘은 상속 관계를 써서는 안된다!!
'JAVA' 카테고리의 다른 글
JAVA - 추상클래스 (0) | 2023.08.10 |
---|---|
JAVA - 다형성과 업캐스팅(Up casting),다운캐스팅(Down casting) (0) | 2023.08.09 |
JAVA - 1차원 배열 (0) | 2023.08.04 |
JAVA - static , 싱글톤 패턴 (0) | 2023.08.03 |
JAVA - this의 특징들 (0) | 2023.08.02 |