상속

jungnoeun·2022년 5월 19일
0

java

목록 보기
8/22

상속

상속: 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것

  • 코드의 재사용성을 높임
  • 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 기여
    • 사용 방법
      새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써준다.
      class Child extends Parent {
      	//...
      }

이 두클래스를 서로 상속관계에 있다고 한다.

  • 조상클래스
    : 상속해주는 클래스
    부모(parent)클래스, 상위(super)클래스, 기반(base)클래스
  • 자손클래스
    : 상속받는 클래스
    자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스



  • 자손클래스는 조상 클래스의 모든 멤버를 상속받기 때문에, Child클래스는 Parent클래스의 멤버들을 포함한다고 할 수 있다. 클래스는 멤버들의 집합이므로 클래스 Parent와 Child의 관계를 다음과 같이 표현할 수 있다.
  • 자손클래스의 인스턴스를 생성하면 조상클래스의 멤버도 함께 생성된다.
  • 따로 조상 클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들을 사용할 수 있다.




  • 부모 클래스와 자손클래스에 멤버변수와 메서드를 추가하면 다음과 같다.
class Parent {
	int age;
}
class Child extends Parent {
	void play() {
    System.out.println("놀자~");
    }
}

  • 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.




상속의 상속

  • 같은 클래스를 상속받는 두 클래스간에는 서로 아무런 관계도 성립하지 않는다.
  • Parent는 자손클래스를 상속받는 GrandChild클래스의 간접 조상이 된다.
  • 그래서 GrandChild클래스는 Parent클래스와 간접적인 상속관계에 있다고 할 수 있다.
  • 자손클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다.






클래스간의 관계- 포함관계

  • 상속외의 클래스를 재사용하는 방법
  • 클래스간에 '포함(Composite)'관계를 맺어주는 것이다.
  • 포함관계: 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 의미한다.

포함관계 맺기 전

class Circle {
	int x;
    int y;
    int r;
}
class Point {
	int x;
    int y;
}

포함 관계를 맺은 후

class Circle {
	Point c = new Point();
    int r;
}
class Point {
	int x;
    int y;
}





클래스간의 관계 설정하기

포함관계 vs 상속관계 정의하기

  • 상속관계 : '~은 ~이다(is-a)'
  • 포함관계 : '~은 ~을 가지고 있다.(has-a)'





단일 상속

다른 객체지향언어인 C++은 다중상속이 가능하지만 자바에서는 단일상속만 지원한다.

  • 이유: 같은 메서드를 가진 두 클래스를 동시에 상속하면 이 이름만 같은 메서드를 어떻게 구별해야 하는지, 이름만 같은 메서드들을 모두 상속받는것인지 알 수 없기 때문이다.





Object 클래스 - 모든 클래스의 조상

object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다.

  • 다른 클래스로부터 상속받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받는다.
  • 컴파일 전 작성코드
class TV {
	//...
}
  • 컴파일 후 코드
class TV extends Object {
	//...
}
profile
개발자

0개의 댓글