상속

임성혁·2022년 8월 7일

자바 기초

목록 보기
21/32

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)
    • Point p = new 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도 상속 받는 것이 된다
profile
열정

0개의 댓글