250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 자바스크립트
- 자바알고리즘
- Java
- SpringBoot
- 스프링부트
- 알고리즘
- 국비지원코딩
- 코드업
- 자바개발자
- 혼공컴운
- 국비지원
- 운영체제
- 코딩
- 개발자
- 백엔드개발자
- 리액트
- 미라클모닝
- 프로세스
- 데이터베이스
- Codeup
- 프로그래머스
- db
- 백엔드
- 자바
- 프로그래머
- 개발자일기
- 프로그래밍
- 소셜로그인구현
- 자바의정석
- React
Archives
- Today
- Total
초코딩(chocoding)
[Java] 자바의 정석 / 상속에 대하여 (개념정리) 본문
728x90
public class Main {
public static void main(String[] args) {
/*
** 상속 ======================================================================================
=> 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- 적은 양의 코드로 새로운 클래스를 작성할 수 있음
- 코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경이 매우 용이함
=> 코드의 재사용성을 높이고 코드의 중복을 제거하여
프로그램의 생산성과 유지보수에 크게 기여
- 상속의 구현 방법
=> 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 "extends"와 함께 써 주면 됨
=> class Parent { }
class Child extends Parent {
//...
//...
}
=> 두 클래스는 서로 상속 관계에 있음
=> 상속해주는 클래스 : 조상 클래스
상속 받는 클래스: 자손 클래스
- 자손 클래스는 조상 클래스의 모든 멤버를 상속 받음 (단, 생성자와 초기화 블럭은 상속되지 않음)
=> 항상 조상 클래스보다 같거나 많은 멤버를 갖고 상속의 상속을 거듭할수록 상속받는 클래스의 멤버 개수는 점점 늘어남
=> 상속 받는다라는 의미가 조상 클래스를 확장 (extend)한다는 의미로 해석될 수 있음 (상속의 키워드가 extends인 이유)
** 클래스 간의 관계 - 포함관계 ====================================================================
=> 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
=> 클래스 간에 "포함(composite)관계"를 맺어주어 클래스를 재사용할 수 있게 함
- 하나의 거대한 클래스를 작성하는 것보다 단위별로 여러 개의 클래스를 작성한 다음,
이 단위 클래스들을 포함관계로 재사용하면 보다 간결하고 손쉽게 클래스를 작성할 수 있음
또한, 작성된 단위 클래스들은 다른 클래스를 작성하는데 재사용될 수 있음
** 클래스 간의 관계 결정하기 ======================================================================
- 상속관계 : '~은 ~이다.' (is-a)
- 포함관계 : '~은 ~을 가지고 있다.' (has-a)
=> 클래스를 가지고 문장을 만들었을 때, 두개의 관계문 중에 문장이 더욱 성립되는 경우에 관계를 맺어 주면 됨
** 단일 상속 ==================================================================================
=> 자바에서는 단일 상속만을 허용함
: 다중상속 허용시, 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있다는 장점이 있지만
클래스간의 관계가 매우 복잡해지고
다른 클래스로부터 상속받은 멤버간의 이름이 같은 경우,
구별할 수 있는 방법이 없다는 단점이 있기 때문에
자바는 이러한 다중상속의 문제점을 해결하기 위해
다중 상속의 장점을 포기하고 "단일 상속만을 허용"
=> 하나의 조상 클래스만을 가질 수 있기 때문에 클래스 간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 해줌
** 모든 클래스의 조상 - Object클래스 ===============================================================
=> 모든 상속계층도의 최상위에는 Object클래스가 위치함
=> 자바의 모든 클래스들은 Object클래스의 멤버들을 상속 받기 때문에
Object클래스에 정의된 멤버들을 사용할 수 있음
** 오버라이딩 ==================================================================================
=> 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
- 오버라이딩의 조건
=> 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부(메서드 이름, 매개변수, 반환타입)는 조상의 것과 완전히 일치해야 함
단, 접근 제어자(access modifier), 예외(Exception)는 제한된 조건 하에서만 다르게 변경 가능
1. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
=> 오버로딩 vs 오버라이딩
- 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것 (new)
- 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 (modify, change)
** 참조변수 super ==============================================================================
=> 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수
=> 상속받은 멤버와 자신의 멤버와 이름이 같을 때 super을 붙여 구별할 수 있음
=> 모든 인스턴스 메서드에서 this와 super가 지역변수로 존재하고
this와 super에는 자신이 속한 인스턴스의 주소가 자동으로 저장됨
** 조상의 생성자 super() =========================================================================
=> 조상의 생성자를 호출하는데 사용
*/
}
}
728x90
'[Java] 자바의 정석' 카테고리의 다른 글
[Java] 자바의 정석 / chap8) 예외처리 - 연습문제 (0) | 2023.09.15 |
---|---|
[Java] 자바의 정석 / 다형성 (0) | 2023.09.11 |
[Java] 자바의 정석 / JVM 생성 순서, 상속 관계에서의 생성자 (0) | 2023.09.08 |
[Java] 자바의 정석 / chap6.객체지향 프로그래밍_연습문제 (0) | 2023.09.05 |
[Java] 자바의 정석 / chap5.배열_연습문제 (0) | 2023.09.01 |