[Java] 객체지향 프로그래밍 - 상속

·2022년 9월 6일
0

Java

목록 보기
3/14
post-thumbnail

객체지향 프로그래밍의 핵심개념

상속

상속

상속이란?

  • 기존 클래스로 새로운 클래스를 만드는 것

💡기존 클래스로 생성된 클래스를 하위 클래스, 기존의 클래스를 상위 클래스라고 하며 하위 클래스는 상위 클래스로 부터 확장된 클래스라고 표현한다.

상속의 특징

  1. 하위 클래스는 상위 클래스의 모든 멤버를 상속받는다(💡생성자, 초기화블럭은 제외)
  2. 하위 클래스의 멤버 개수 >= 상위 클래스의 멤버 개수
  3. 코드의 재사용성으로 중복을 줄일 수 있다.
  4. 다형적 표현이 가능
  5. 단일 상속만 가능하다.

    💡 다중상속의 효과를 누리고 싶다면?
    비중이 높은 클래스만 상속관계로 처리하고 나머지는 포함관계로 처리한다.

예제 코드

class Parent {}
class Child extends Parent {} //Parent 클래스에서 확장된 Child 클래스

extends를 사용하여 상속관계를 표현 한다.

포함관계

포함관계란?

  • 클래스의 멤버로 다른 클래스 타입의 참조변수를 선언하는 것.
class Circle {
     int x;
     int y;
     int r;
}
class Point {
     int x;
     int y;
}

int x와 int y 코드가 중복되어 사용된다. 이러한 중복을 줄이기 위해 포함관계를 이용한다.

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

class Point를 class Circle안에 선언함으로서 코드의 중복을 줄일 수 있다.
이때, Circle이 Point를 포함하고 있다고 표현한다.

💡 상속관계와 포함관계
상속관계 : A는 B이다.
포함관계 : A는 B를 가지고 있다.

매서드 오버라이딩

오버라이딩이란?

  • 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 자신에게 맞게 재정의하는 것.
  • override : ~위에 덮어쓰다.
  • 메서드의 이름은 동일! 내용은 변경!!

오버라이딩이 성립하기 위한 조건

  1. 선언부(반환타입, 메서드 이름, 매개변수 목록)가 상위 클래스의 메서드와 일치 해야 한다.
  2. 접근 제어자를 상위 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  3. 상위 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

오버라이딩과 오버로딩

  • 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것(new, 이름만 같은거임) -> 상속과 무관
  • 오버라이딩 : 상속 받은 메서드의 내용을 변경하는 것(change)

참조변수 super와 생성자 super()

참조변수 super는 참조변수 this와, 생성자 super()는 생성자 this()와 비슷한 역할을 한다.

참조변수 super

  • 상위클래스의 멤버와 자신의 멤버를 구별할 때 사용.
  • 인스턴스 메서드 내에서만 존재.

생성자 super()

  • 상위 클래스의 생성자를 호출할 때 사용.
  • 상위 클래스의 멤버는 상위 클래스의 생성자를 호출해서 초기화.
  • 생성자 안에서만 사용가능하며 반드시 첫 줄에 와야 한다.
  • 첫 줄에 super()가 없는 경우, 컴파일러가 자동으로 super()를 추가해준다. 이때 상위 클래스에 기본 생성자가 없으면 에러가 발생한다.

Object 클래스

Object 클래스란?

  • 최상위에 위치한 상위 클래스
  • 자바의 모든 클래스는 Object클래스로부터 확장된다.
  • 표현하지 않아도 컴파일러가 자동적으로 extends Object를 추가한다.

대표적인 메서드

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글