inheritance ~ overriding ~abstracts
😀상속
- 부모 클래스 - 자식클래스
- 형식) 자식클래스에서...
- [접근제한] class 자식클래스명 extends 부모클래스명 {}
- 자식클래스에서 멤버변수나 멤버메서드는 숨겨져서 보이지 않음
* 상속(Inheritance)?
* - 객체지향 프로그램 4대 특징 중 하나.
* - 실세계에서의 상속은 상위 객체의 속성이 하위 객체에 물려져서 하위 객체가 상위 객체의 속성을 모두 가지는 개념임.
* - 자바에서의 상속은 자식클래스가 부모클래스의 속성을 물려 받고 기능을 추가하여 확장(extends) 하는 개념임.
* - 상속은 슈퍼클래스의 필드와 메서드를 물려 받아서 코드를 재사용 함으로써, 코드 작성에 드는 시간과 비용을 줄일 수 있음.
* - 기존에 이미 잘 만들어진 클래스를 재사용하여 새로운 클래스를 생성하는 자바 문법. - 중요함.
* 즉, 특정 클래스를 만들 때 기존의 클래스의 데이터(속성)와 기능(메서드)을 그대로 물려 받아서 중복적인 코드를 없애줌.
* (클래스의 재사용, 코드의 중복을 없애줌)
* - 자식과 부모의 관계로 형성이 되어 있음.
* ==> 부모클래스 : Super, Parent 클래스라고 하기도 함.
* ==> 자식클래스 : Sub, Child 클래스라고 하기도 함.
* ==> 자식은 부모의 멤버보다 같거나 많다.
* - 상속의 대상은 멤버(멤버변수, 멤버메서드)
* ==> 단, 생성자나 private 접근 제한을 갖는 멤버변수와 멤버메서드는 상속에서 제외.
* - 상속 시 사용되는 키워드 : extends
* - 상속은 단일상속만 가능함.
* ==> 즉, 상속을 받을 수 있는 클래스는 하나이다.
* - 상속의 장점은 클래스의 수정을 최소화시킬 수 있다는 장점이 있음.
* 또한 유지보수의 시간을 최소화시켜 준다는 장점이 있음.
*
* 형식)
* [접근제한] class 자식클래스명 extends 부모클래스명 {
* .......;
* }
* - 상속관계 : "~ 은 ~ 이다." ==> is ~ a 관계
* 포함관계 : "~ 은 ~ 를 가지고 있다." ==> has ~ a 관계
* ==> 사람은 (name, age, id)를 가지고 있다.
*
* - 주의사항) 부모클래스는 반드시 기존에 미리 정의되어 있어야 함.
*/
😀 Sonata 클래스의 객체 생성과정
* Sonata 클래스의 객체 생성시에 JVM은 우선적으로
* Car 부모클래스의 객체를 생성한 후에 그 다음에 Sonata 클래스의 객체를 생성함
*/
😀 void getStudentInfo() {}
// 멤버 메서드에서 접근지정자가 없는 경우는 default값으로 package 내 어디클래스든 호출 가능하다.
1. super 키워드
* - 부모의 멤버를 호출하는 명령어
* 형식) super.부모클래스멤버(멤버변수, 멤버메서드)
*
ex) 메서드 실행명령문에서 super.멤버
2. this 키워드
* - 현재 클래스에 소속된 멤버를 호출하는 명령어
* - this 키워드는 현재 객체 자기 자신을 의미함.
* 형식) this. 현재(자식)클래스멤버(멤버변수, 멤버메서드)
*/
😀 인자 생성자 실행명령문에서 super()
== > 부모 클래스의 기본생성자 호출
😀 인자 생성자 실행명령문에서 super(x, y)
== > 부모 클래스의 인자생성자 호출
😀 인자 생성자 실행명령문에서 this(x, y)
== > 본인 클래스의 인자생성자 호출
😀 메서드 재정의(Method Overriding)
* - 부모 클래스에서 정의한 메서드를 자식 클래스에서
* 자식 클래스에 맞게 다시 작성(재정의) 하는 것을 말함.
*
* [메서드 재정의 특징]
* 1. 반드시 상속 관계에서만 발생함.
* (메서드 다중 정의 : 동일한 클래스 내에서 발생)
* 2. 부모 클래스의 원형 메서드를 자식 클래스에서 재정의(다시 작성).
*
* ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
* [메서드 재정의 조건]
* 1. 반드시 접근 지정자, 리턴타입(반환형), 매개변수 모두 일치해야 함.
* (메서드 다중 정의 - 매개변수의 갯수가 다르거나, 갯수가 같다면 자료형이 다르던지 해야 함)
* 2. 접근지정자는 확장 가능(축소 불가능). // 근데 동일하게 맞춰주는게 더 좋음
*/
😀overriding에서 부모 클래스를 상속받고 ctrl+space눌러서 메서드 찾고 누르면
@표시로 나오는게 있는데 이게 있으면 오타 났을 때 빨간 줄 뜸
😀추상 클래스(Abstract Class)?
* 1. 추상 메서드를 포함하는 클래스.
* 2. 추상 메서드는 본체(body)가 없는 메서드.
* ==> 선언은 되어 있으나 코드가 구현되지 않은 껍데기만 있는 메서드를 말함.
* 예) void display(); // { } 가 없다.
* 3. 클래스 앞에 abstract 키워드를 붙여야 한다.
* 4. 추상 메서드를 재정의하지 않으면 error 발생.
* ==> 추상 메서드 재정의 강제성.
* 5. 추상 클래스는 객체 생성이 불가능.
* ==> - 자식 클래스를 대상으로 객체 생성.
* - 원칙적으로 자식 클래스도 추상 클래스임.
* 이유는 추상클래스를 그대로 상속을 받았기 때문임.
* - 하지만 부모의 추상 메서드를 재정의하게 되면 객체생성이 가능함.
* 6. 추상 클래스는 추상 메서드를 가진 클래스를 말함.
* 7. 물론 일반 멤버(멤버변수, 멤버메서드)를 가질 수 있음.
* 8. 그러나 한 개 이상의 추상 메서드는 반드시 존재해야 함.
* 형식)
* [접근제한] abstract class 클래스명 { }
* 9. 용도 : - 응용 프로그램에서 설계와 구현 부분을 분리해서 작업 시 사용됨.
* - 추상 클래스를 책의 목차에 비유를 하면, 서브클래스는 목차에 따라 완성된 책과 같음.
* 책을 쓸 때도 목차를 잡아 놓고 책을 쓰면 훨씬 쉽고 빠르며 방향이 흐트러지지 않는 것처럼
* 추상 클래스를 이용하면 응용 프로그램의 설계와 구현을 분리할 수 있음.
*/
/*
* 추상 클래스에서 error 발생 - 2가지
* 1. 자식 클래스에서 추상 메서드를 재정의(O).
* 2. 자식 클래스에서 재정의를 하지 않는 경우
* ==> 자식 클래스 이름 앞에 abstract 키워드를 붙여야 함.
*/
😀추상클래스(세부 내용이 달라서 어차피 메서드 재정의 해야할 경우 사용)
- 클래스 앞에 abstract 키워드를 붙여야 한다 + 추상메서드 앞에 asbstract 키워드 붙이기
- 자식클래스에서 추상 메서드를 재정의
- main메서드에서 자식 클래스를 이용하여 객체 생성
'자바 JAVA' 카테고리의 다른 글
23.01.17 (추상 클래스) (0) | 2023.01.17 |
---|---|
23.01.16 (상속과 다형성) (0) | 2023.01.16 |
23.01.12 (클래스와 객체) (0) | 2023.01.12 |
23.01.11 (클래스와 객체) (0) | 2023.01.11 |
23.01.10 (클래스와 객체) (0) | 2023.01.10 |
댓글