비구름이 역삼 멀캠을 왕따시킨 날
상속(inheritance: OOP is A P'I'E)
기존(상위) 클래스의 자산(멤버)을 자식(하위) 클래스에서 재사요하기 위한 것.
즉, 상위 클래스의 멤버를 물려받아 사용할 수 있으므로 코드의 재사용성이 증가(중복 감소)
상속 관계는is a
관계로 생각해도 됨.
ex) Person is a Object 등등등사용법
extends 키워드를 class 명 옆에 붙이고 상속받을 상위 클래스를 정해주면 됨
예시
Object Class: 모든 객체의 최상위 객체
별도의 extends 키워드를 붙이지 않아도 컴파일러가 기본적으로 붙여줌.
Object에도 정의된 메서드가 많음. 따라서, 모든 객체는 Object의 메서드를 재정의 해서 사용 가능
주의
클래스 상속은 단일 상속
두개 이상의 클래스를 상속(처럼) 사용하고 싶다면, 하나를 제외한 나머지를 멤버로 선언한 후 사용
super
this 키워드는 자기 자신의 멤버를 접근했다면
super는 자기의 조상 클래스를 접근
깜짝 문제!
해당 코드를 실행했을 때의 결과는?method child parent
super()
this()와 마찬가지로 생성자를 호출하는 개념인데, 다른 점은 조상의 생성자를 호출함.
✨this()나 super()가 없다면 컴파일러에서 자동으로 super()를 붙여줌✨
this()처럼 맨 첫줄이 아니면 컴파일 에러예시
SpiderMan3라는 클래스는 Person2라는 클래스를 상속받고 있다.
SpiderMan3 클래스를 생성할 때 필요한 인자를 받고 있는데, name만super(name)
으로 처리하고 있다.
즉, 부모 클래스인 Person2의 name을 인자로 받는 생성자를 호출하는 것.
만약super(name)
이 없으면super()
가 자동 호출되는데, 부모 클래스인 Person2에는 기본 생성자가 없기 때문에 컴파일 에러가 발생함.
final
마지막, 더 이상 바꿀 수 없음.(
진짜_레알_최종
)class
더 이상 확장할 수 없는 클래스
즉, 상속 금지 -> 오버라이드 금지
method
더 이상 재정의 할 수 없는 메서드
즉, Overriding 금지
variable
더 이상 값을 변경할 수 없음
Blank final
값이 할당되지 않은 멤버 변수
final String str;
처럼 선언하면null
이 들어간 상태로 값을 변경할 수 없게 된다.
그럼 저 변수의 의미가 없어짐.
그래서!
Blank final 변수는 생성자에서 초기화를 강제하는 역할.
즉, 생성자에서 1회 초기화 가능하다.접근 제한자
표
예시
메서드 재정의(Method Overriding)의 조건
- 메서드 이름이 같아야 함.
- 매개 변수의 개수, 타입, 순서가 같아야 함.
- 리턴 타입이 같아야 함.
- 접근 제한자는 부모 보다 넓거나 같아야 함.
- public > protected > package > private
- 접근 제한자의 범위만 알면 굳이 외우지 않아도 됨.
- 부모보다 더 큰 예외를 던질 수 없다.
오늘 자바의 기본기가 많이 부족하다는 느낌을 받은 날이었다. 그만큼 배운 것도 많았다.