1. 특징
- 단일 상속만 가능
- 자식 클래스는 하나의 부모 클래스에서만 상속 받을 수 있음
- 자식 클래스를 객체로 생성할 때, 부모 클래스가 먼저 객체화 된다
- 모든 클래스는 Object 클래스로부터 시작하는 상속관계의 하위 객체
- 모든 클래스의 가장 상위 클래스는 Object 클래스임
2. 오버로드와 오버라이딩
- 오버로딩: 같은 메소드명, 다른 리턴 타입과 다른 매개 변수
- 오버라이딩 : 부모에게 상속 받은 것을 재정의
3. 다형성 (Polymorphism) 196p
- 하위클래스 객체를 상위 클래스 자료형으로 변환 가능
- 동물 - 개, 고양이, 쥐
- 개, 고양이, 쥐를 동물 타입으로 변환 가능하지만 동물을 개, 고양이, 쥐로 변환 불가능
4. 상속관계 속 접근제한자
- protected : 상속을 물려준 객체에서만 접근 가능, 다른 패키지에서 접근 불가능
5. 추상 클래스
- '추상적' 정의 : 대상을 추려서 나타내다
- new 선언하여 사용 불가능, 상속을 물려주기 위해 존재하는 클래스
1. 상속(Inheritance)
- 정의와 장점
- 기존의 클래스를 재사용
- 자손은 조상의 모든 멤버를 상속 받음
- 자손의 멤버개수는 조상보다 적을 수 없음
class Point {
int x;
int y;
}
class Point3D extends Point{
int z;
}
2. 상속 관계
- 공통 부분은 조상에서 관리, 개별 부분은 자손에서 관리
- 조상의 변경은 모든 자식에게 영향 끼침, 자식의 변경은 부모에게 영향 안 끼침
3. 포함 관계 (Composite)
- 포함이란?
- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
- 작은 단위의 클래스를 먼저 만들고 조합해서 큰 클래스 만들기
- has-a : human has a legs, foot, head (human에게는 legs, foots, head가 있음)
- is-a : 임성혁 is human (임성혁은 human을 상속 받음)
class Circle {
int x;
int y;
int r;
}
class Circle {
Point c = new Point();
int r;
}
class car {
Engine e = new Engine();
Door[] d - new Door[2];
}
4. 클래스 간의 관계 결정하기
- 원은 도형이다 (Circle is a shape)
- class Circle extends Shape
- 원은 좌표를 가지고 있다 (Circle has a point)
- 카드 덱은 카드를 가지고 있다 (Deck has cards)
- Card[] card = new Card[52];
5. Object 클래스 - 모든 클래스의 최고 조상
- 조상이 없는 클래스는 자동적으로 Object 클래스를 상속 받음
- 11개 메소드를 상속받음 (Object)
6. 오버라이딩 (Overriding)
- 정의 : 상속받은 메소드를 재정의
- 오버로딩과 헷갈리지 말자
7. Super - 참조변수
- this : 인스턴스 자신을 가리키는 참조변수
- super : 조상과 자신의 멤버를 구별하는데 사용 (this와 같음)
8. 다형성 (Polymorphism)
- 조상 타입의 참조변수로 자손 타입의 객체를 다룰 수 있는 것을 다형성
IPhone iphone14 = new IPhone();
SmartPhone smartphone = new SmartPhone();
SmartPhone sm = new IPhone();
- 참조변수의 형변환
- 서로 상속관계 있는 타입간의 형변환 가능
- 자손 타입에서 조상 타입으로 형변환 할 때 형변환 생략 가능
- UpCasting <-> DownCasting (up : 형변환 생략 가능 / down : 형변환 생략 불가능)
- Instanceof 연산자 : 타입체크
- 조상 타입의 배열에 자손들의 객체를 담을 수 있다
- Product[] applelist = new Product[3];
9. 추상 클래스
- 정의
- 미완성 설계도
- 추상 메소드 (미완성 메소드) 포함
abstract class Shape {
abstract void area();
abstract void round();
}
* human으로 상속 연습하기
* 추상 클래스는 설계가 완성되면 그 때 사용(설계 완성되기 전에 사용하면 뻘짓)
* 단일 상속, 쭉 계승 가능
- a, b, c 클래스가 있다
- b는 a를 상속 받고, c는 b를 상속 받는다면 c는 a도 상속 받는 것이 된다