본문 바로가기
Programming Language/Java

[자바의 정석] ch7-1 ~ ch7-11 객체지향 개념 정리 (상속, Object클래스, 오버라이딩, 참조변수 super, 생성자super() )

by Baest 2021. 7. 19.

ch7-1 상속(Inheritance)

- 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용)

- 두 클래스를 부모와 자식으로 관계 맺어주는 것

- 자손은 조상(부모의 부모)의 모든 멤버를 상속받음(생성자, 초기화 블럭 제외)

- 자손의 멤버 개수는 조상보다 적을 수 없음(같거나 많음) -> 자손의 멤버개수 >= 조상의 멤버 개수

- 자손의 변경은 조상에 영향을 미치지 않음(단, 조상의 변경은 자손에게 영향을 줌)

 

ex)

class 자식클래스 extends 부모클래스 {

 

}

 

 

ch7-3 포함 관계

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

 

class Circle {

     int x;                                           class Circle{                                       class Point {

     int y;                         ----->                 Point c = new Point();      ----->          int x;

     int r;                                                  int r;                                              int y;

}                                                     }                                                      }

 

1. 상속                                             2. 포함 관계(Point class 포함)

 

 

ch7-4 클래스 간의 관계 결정하기

- 상속관계 : '~은 ~이다. (is~a)'

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

 

*상속은 제한이 많기 때문에 꼭 필요할 때만! 대부분 포함으로 사용함

 

1. 포함                                                       2. 상속 

class Circle {                                                 class Circle extends Point {

     Point c = new Point();

     int r;                                                            int r;

}                                                                 }

원(Circle)은 점(Point)을 가지고 있다.                    원(Circle)은 점(Point)이다.

 

 

ch7-5 단일 상속(Single Inheritance)

- Java는 단일(하나의 부모만 상속) 상속만을 허용함

*인터페이스 사용하면 충돌 문제 해결하면서, 다중 상속 효과 나타낼 수 있게함

 

- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 하면 인터페이스 없이도 다중상속 효과 낼 수 있음

 

 

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

- 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 됨

- 모든 클래스는 Object 클래스에 정의된 11개(toString(), equals(Object obj), hasCode() 등)의 메서드를 상속받음

 

*toString()은 객체의 주소값을 찍어줌 -> 오버라이딩 부분에서 더 자세히 배움

 

 

ch7-7 (메서드)오버라이딩(overriding)

- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 (override: 덮어쓰다)

- 선언부 변경 불가. 내용만 변경 가능( 구현부 { } )

 

 

ch7-8 오버라이딩의 조건

1. 선언부가 조상 클래스의 메서드와 일치해야함

2. 접근 제어자(public, protected, defalt, private)를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음

3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없음

 

 

ch7-9 오버로딩 vs 오버라이딩

오버로딩(overloading) : 기존에 없는 (이름이 같은)새로운 메서드를 정의하는 것(new)

오버라이딩(overriding) : 상속받은 메서드의 내용을 변경하는 것(change, modify)

 

 

ch7-10 참조변수 super

- 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자) 내에서만 존재

- 조상의 멤버를 자신의 멤버와 구별할 때 사용

 

 

ch7-11 super() - 조상의 생성자

*참조변수 super와 다름

- 조상의 생성자를 호출할 때 사용

- 조상의 멤버는 조상의 생성자를 호출해서 초기화

- (추가조건) 생성자의 첫 줄에 반드시 생성자( super(), this())를 호출해야 함. 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super(); 를 삽입

 

 

============================================================================

https://youtu.be/Pgutf0G3nE4