< 상속 >
- 매 클래스마다 중복된 코드들을 하나하나 기술하게 되면 수정과 유지보수가 번거로움
중복된 필드, 메소드를 하나의 클래스(부모클래스)로 만들어서, 해당 클래스의 속성, 행위를 가져다 쓰는 형식 => 상속
- 기존의 클래스를 이용해서 새로운 클래스를 만드는 것
- 자식클래스 작성 시, 부모로부터 상속받은 부분은 기술하지 않음
단, 메소드는 상속을 받아 재정의해서 사용 가능 (=> 오버라이딩과 연결되는 개념)
- 다형성과 연관된 개념
상속 해주는 클래스 | 상속 받는 클래스 |
부모클래스 | 자식클래스 |
조상클래스 | 후손클래스 |
상위클래스 | 하위클래스 |
슈퍼클래스 | 서브클래스 |
확장클래스 | 파생클래스 |
[ 표현법 ]
자식클래스이름 extends 부모클래스이름 (extends 예약어 사용)
[ 장점 ]
- 중복된 코드를 공통으로 관리 (새로운 코드 작성, 수리에 유리)
- 보다 적은 양의 코드로 새로운 클래스 생성 가능
=> 프로그램의 생산과 가독성, 유지보수에 기여
[ 특징 ]
- 클래스간 다중 상속 불가능 : 단일 상속 - 부모클래스가 단 하나
- 모든 클래스는 Object클래스의 후손 : 모든 클래스 - 내가 만든 클래스, 자바에서 이미 제공하는 클래스
(클래스 뒤에 'extends Object '가 생략되어 있는 것)
=> Object클래스의 메소드 호출, 오버라이딩을 통한 재정의 가능
< super >
- 해당 부모의 주소를 담고 있음
- super. : 직접접근 연산자를 통해 부모에 접근 가능
cf) this - 해당 객체의 주소값을 담고 있음
- 상속시, 자식클래스에서 'super.필드명' 으로 직접 접근은 불가능 (private 접근제한자 - 외부접근 제한)
- 해결 방법 3가지
1. 부모클래스 필드의 접근제한자 변경 : private → protected (=> 캡슐화 원칙에 위배)
2. 부모클래스의 setter메소드 호출 : super.set필드이름();
ex) super.setName(name);
3. 부모생성자 호출하여 초기화 : 부모객체를 먼저 생성한 후, 자식객체 생성하는 순서. super(매개변수들);
< 오버라이딩 (Overriding) >
- 상속받고 있는 부모클래스의 메소드를 자식클래스에서 재정의(재작성) 하는 것
- 기능을 일부 고쳐서 사용하겠다는 의미
- 자식클래스에 오버라이딩 된 메소드가 우선권을 가지고 호출됨
[ 성립 조건 ]
1. 부모메소드의 메소드명과 동일
2. 매개변수의 자료형, 개수, 순서가 동일 (매개변수명과는 무관)
3. 반환형이 동일
(4. 부모메소드의 접근제한자와 같거나, 공유범위가 더 넓어야함)
[ @Override ]
- 어노테이션(annotation) : 일종의 주석, 코멘트
- 생략가능 : 명시하지 않아도 부모클래스의 메소드와 형태가 같으면 오버라이딩으로 판단
- 장점 : 실수를 줄일 수 있음(메소드명 일치하지 않으면 오류 발생), 바로 확인 가능
'개발 > Java' 카테고리의 다른 글
[Java] 자바 - 추상 메소드 / 추상 클래스 ( 예약어 abstract ) (0) | 2022.09.20 |
---|---|
[Java] 자바 - 다형성(Polymorphism) / 업캐스팅(Upcasting) / 다운캐스팅(Downcasting) / 동적바인딩 / instanceof 연산자 (0) | 2022.09.19 |
[Java] 자바 - 객체배열(Object Array) (0) | 2022.09.14 |
[Java] 자바 - 오버로딩(Overloading) (0) | 2022.09.14 |
[Java] 자바 - 메소드(Method) / static 메소드 (1) | 2022.09.13 |