| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- oracle
- jsp
- jpa
- 자바
- MySQL
- Next.js
- web
- SQL
- BACK-END
- 코드테스트
- 오라클
- 자바스크립트
- 알고리즘
- node.js
- spring
- JavaScript
- java
- 쿼리
- 정리
- 디자인 패턴
- 미니정리
- 프런트엔드
- 스프링
- 백엔드
- 데이터베이스
- 프로그래머스
- 코드 테스트
- 프론트엔드
- 스프링부트
- 서버
- Today
- Total
참치코더의 꿈 메모장
2021/08/14 Java - 상속 본문
클래스 상속
자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends 뒤에 기술한다.
class 자식클래스 extends 부모클래스{
}
상속의 특징
1. 여러개의 부모 클래스를 상속 받을 수 없다. 따라서 extends 뒤에는 단 하나의 부모 클래스만 와야 한다.
2. 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다.
또한 서로 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메서드도 상속 대상에서 제외된다.
부모 생성자 호출
항상 부모 객체가 먼저 생성되고 그다음에 자식 객체가 생성된다.
*모든 객체는 클래스의 생성자를 호출해야만 생성되며, 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.
자식클래스( 매개변수 선언, ..... ) {
super(매개값, .....);
}
super(매개값, ...)은 매개값의 타입과 일치하는 부모 생성자를 호출한다.
만약 매개값의 타입과 일치하는 부모 생성자가 없을 경우 컴파일 에러가 발생한다.
부모 클래스에 기본 생성자가 없고 매개 변수가 있는 생성자만 있다면 자식 생성자에는 반드시
부모 생성자 호출을 위해 super(매개값, ...)를 명시적으로 호출해야 한다.
super(매개값, ...)은 반드시 자식 생성자 첫 줄에 위치해야 하며, 그렇지 않으면 컴파일 에러가 발생한다.
메소드 재정의
부모 클래스에 있는 메서드를 자식 클래스에서 좀더 효과적으로 사용하기 위해 메서드를
수정해야 하는 경우가 생긴다.
자바는 이러한 경우를 위해 메소드 재정의(오버라이딩) 기능을 제공한다.
메소드 재정의(오버라이딩) 방법
1. 부모의 메소드와 동일한 시그니쳐(리턴 타입, 메소드 이름, 매개 변수 목록)를 가져야 한다.
2. 접근 제한을 더 강하게 재정의할 수 없다.
3. 새로운 예외(Exception)을 throws할 수 없다.
* 메소드가 재정의되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드를 호출하면,
재정의된 자식 메소드가 호출된다.
* 메소드를 재정의 하면 @Override 라는 어노테이션을 선언 하거나 또는 자동으로 이클립스에서 선언해주는데
메소드가 정확히 재정의 된 것인지 컴파일러가 확인해 주기 때문에 개발자의 실수를 줄여준다.
부모 메소드 호출
자식 클래스의 메소드를 재정의 하게 되면, 부모 클래스의 메소드는 숨겨지고 재정의된 자식 메소드만 사용된다.
그러나 부모 클래스의 메소드를 다시 호출해서 사용하고 싶다면 super 키워드를 붙여서 호출할 수 있다.
super.부모메서드( );
* 자주 사용되는 고정값들은 상수를 사용함으로써 가독성을 높여준다.
final 클래스와 final 메소드
final 키워드는 클래스, 필드, 메소드를 선언할 때 사용할 수 있는데, 해당 선언이 최종 상태이고
결코 수정될 수 없음을 뜻한다.
상속할 수 없는 final 클래스
클래스를 선언할 때 final 키워드를 class 앞에 붙이면 이 클래스는 최종적인 클래스이므로
상속할 수 없는 클래스가 된다.
즉 final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다는 것이다.
public final class String{ ... }
재정의할 수 없는 final 메소드
메소드를 선언할 때 final 키워드를 붙이면 이 메소드는 최종적인 메소드이므로 재정의할 수 없는 메소드가 된다.
public final 리턴타입 메소드( [매개변수, ...] ) { .... }
'JAVA' 카테고리의 다른 글
| 2021/08/24 Java- 컬렉션 프레임워크 Set (0) | 2021.08.24 |
|---|---|
| 2021/08/23 Java - 컬렉션 프레임워크 List 컬렉션 (0) | 2021.08.23 |
| 2020/08/11 Java - 패키지와 접근 제한자 (0) | 2021.08.11 |
| 2021/08/10 Java - 인스턴스 멤버와 정적 멤버 (0) | 2021.08.10 |
| 2021/08/04 Java - 토이 프로젝트(게시판 만들기) (0) | 2021.08.04 |