Day 23

ChangWoo·2023년 4월 27일
0

자바의 정석

목록 보기
23/71

ch 7-1,2 상속

상속(Inheritance)

  • 기존의 클래스로 새로운 클래스를 작성하는 것.(코드의 재사용)
  • 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
Ex) class Parent {}
	class Child extends Parent {
    	// .....
    }


- Parent 클래스와 Child 클래스는 상속관계!

  • 자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
    - 부모의 부모 클래스가 존재할 수 있다.
  • 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다.)
Ex) class Parent {
		int age;
    }
    class Child extends Parent {}

  • child = 멤버 1개 (자신의 멤버는 없으나, 부모로부터 상속받으므로 1개!)
  • parnet = 멤버 1개
  • 자손의 변경은 조상에 영향을 미치지 않는다.
Ex) class Parent {
		int age;
     }
     class Child extends Parent {
     		void play() {
            	System.out.println("놀자~");  // 자식에 새로운 멤버 추가
            }
      }

  • 자손에 새로운 멤버를 추가했지만, 조상에 영향을 미치지 않으므로 조상클래스는 멤버1개, 자손 클래스는 멤버2개가 된다. (자신 멤버 1개 + 상속받은 멤버 1개)
  • 조상크래스를 확장해서 자손클래스를 만들기 때문에 "확장(extend)"이라는 키워드를 사용한다.

상속을 받는 경우와 상속을 받지 않는 경우

Ex) class Point {	// 2차원 좌표의 한 점 (x,y)
		int x;
        int y;	
}
Ex) class Point 3D {	// 3차원 좌표의 한 점 (x,y,z)
		int x;
        int y;				-->   class Point3D extends Point { int z;}
        int z;
}
  • 왼쪽은 Point와 전혀 관련이 없고, 오른쪽은 Point와 상속관계다.
  • 왼쪽은 Point를 변경해도 Point3D가 영향을 받지 않는다. (& 멤버 3개)
  • 왼쪽은 Point를 변경하면 Point3D가 영향을 받는다. (& 멤버 2개)

ch 7-3,4 클래스 간의 관계, 상속과 포함

포함 관계

포함(composite)이란?
- 클래스의 멤버로 참조변수를 선언하는 것

  • 왼쪽 : 멤버 3개로 표현 / Point와 관련 X
  • 오른쪽 : 포함을 통해 표현(Circle이 Point를 포함) / Point와 관련 O
  • 포함 = 다른 클래스 타입의 변수를 선언하고 그 타입의 객체를 만들어주는 것이다.
    - 작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다.

클래스 간의 관계 결정하기

  • 상속관계 : '~은 ~이다.(is-a)'
    • 포함관계 : '~은 ~을 가지고 있다.(has-a)'
  • 1번 = 포함관계 / 2번 = 상속관계 ("가지고 있다." 표현이 더 말이 되므로 1번)
  • 대부분 상속 보다 포함을 많이 사용한다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글