[Java] 정리 (상속(inheritance))

2022. 8. 12. 18:28·Language/Java
728x90

상속(inheritance)

  • 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.
  • 두 클래스를 조상과 자손으로 관계를 맺어주는 것.
  • 자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화 블럭은 제외된다.)
  • 자손의 멤버개수는 조상의 멤버개수보다 같거나 많다.

조상 클래스 - 부모 클래스, 상위 클래스, 기반 클래스

자손 클래스 - 자식 클래스, 하위 클래스, 파생된 클래스

class Point {
	int x, int y;
}
class Point3D {
	int x;
	int y;
	int z;
}
class Point3D extends Point {
	int z;
}
class Point3D{
	int z;
	Point p = new Point();
	p.x;
	p.y
}

클래스간의 관계 -  상속관계

  • 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다.
  • 조상의 변경은 자손에 영향을 미치치만, 자손의 변경은 조상에 아무런 영향을 끼치지 않는다.

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

  • 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
  • 작은 단위의 클래스를 먼저 만들고 이들을 조합해서 하나의 커다란 클래스를 만든다.
class Point {
	int x, y;
}
class Circle {
	int x, y, r;
}
class Circle {
	Point c = new Point(); //원점
	int r; //반지름
}

클래스간의 관계를 결정 - 상속 vs 포함

  • 가능한 많은 관계를 맺어주어 재사용을 높이고 관리하기 쉽게 한다.
  • is-a관계와 has-a관계를 가지고 문장을 만들어 본다.
  • 원(Circle)은 점(Point)이다. Circle is a Point.
  • 원(Circle)은 점(Point)을 가지고 있다. Circle has a Point.
  • 상속관계 : ~은 ~이다.(is - a)
  • 포함관계 : ~은 ~를 가지고 있다.(has - a)
class Circle extends Point {
	int r;
}
class Circle {
	Point c = new Point();
	int r;
}

단일상속

  • 자바에서는 단일 상속만 허용된다.

오버라이딩(Overriding)

  • 조상 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스의 맞게 변경하는 것을 말한다.
class Point {
	int x; int y;
	String getLocation() {
		return "x : " + x + ", y : " + y;
	}
}
class Point3D extends Point {
	int z;
	String getLocation() { //오버라이딩
		return "x : " + x + ", y : " + y + ", z : " + z;
	}
}

오버라이딩의 조건

  • 선언부가 같아야 한다.(이름, 매개변수, 리턴타입)
  • 접근제어자를 좁은 범위로 변경할 수 없다. (조상의 메서드가 protected라면 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.)
  • 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

오버로딩 vs 오버라이딩

  • 오버로딩 - 기존에 없는 새로운 메서드를 정의하는 것(new)
  • 오버라이딩 - 상속받은 메서드의 내용을 변경하는 것(change)
class Parent {
	void parentMethod();
}
class Child extends Parent {
	void parentMethod() {} //Overriding
	void parentMethod(int i) {} //Overloading
    
	void childMethod() {} //새로운 메서드
	void childMethod(int i) {} //Overloading
	void childMethod() {} //Error => 중복정의
}

super - 참조변수

this

  • 인스턴스 자신을 가리키는 참조변수
  • 인스턴스의 주소가 저장되어 있다.
  • 모든 인스턴스 메서드에 지역변수로 숨겨진채로 존재한다.

 

super - this와 같다.

  • 조상의 멤버와 자신의 멤버를 구별하는데 사용한다.
  • 자손클래스의 인스턴스를 생성하면 자손의 멤버와 조상의 멤버가 합쳐진 하나의 인스턴스가 생성된다.
  • 조상의 멤버들도 초기화되어야하기 때문에 자손의 생성자의 첫 문장에서 조상의 생성자를 호출해야 한다.
  • Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자(같은클래스의 다른 생성자 또는 조상의 생성자를 호출해야 한다.) 그렇지 않으면 컴파일러가 자동적으로 super();를 생성자의 첫 줄에 만들어준다.

'Language > Java' 카테고리의 다른 글

[Java] 실습 (여러 종류의 객체를 하나의 배열로 사용하기)  (0) 2022.08.16
[Java] 실습 (get, set)  (0) 2022.08.12
[Java] 실습 (단일 상속)  (0) 2022.08.12
[Java] 실습 (this, super)  (0) 2022.08.12
[Java] 실습 (Overriding Overloading)  (0) 2022.08.12
'Language/Java' 카테고리의 다른 글
  • [Java] 실습 (여러 종류의 객체를 하나의 배열로 사용하기)
  • [Java] 실습 (get, set)
  • [Java] 실습 (단일 상속)
  • [Java] 실습 (this, super)
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    object
    Python
    HTML
    제어문
    MySQL
    변수
    파이썬
    next.js
    TypeScript
    array
    JavaScript
    자바스크립트
    event
    web
    react
    타입스크립트
    객체
    CSS
    리액트
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Java] 정리 (상속(inheritance))
상단으로

티스토리툴바