본문 바로가기
프로그래밍 언어/Java

Java) 10/26 - 상속

by nomfang 2021. 10. 26.
728x90
반응형

상속

  1. 부모가 가진 모든 것을 자식에게 물려주는 것
  2. 자식은 자신만의 멤버를 추가하는 것

부모 레벨로 갈수록 일반화 (추상화)
자식 레벨로 갈수록 구체화

재사용성을 높인다..

Object

모든 객체(상속)의 근원은 Object 이다
Object는 Root 객체로써 자바에 존재한다
-> 모든 객체는 Object를 부모로 가지고 있음

  • 필드가 없고 메소드로만 이루어져 있는 Class
    : toString, equals() 등의 메소드를 가지고 있다
  • 주소 값을 가진 참조 변수(레퍼런스 변수)의 뒤에는 toString()이 생략되어 있다

추상화

  1. 클래스 간 공통적 성질 추출
  2. 공통된 성질을 일반적인 성질로 가지는 모듈 생성 (is a 관계 확인)
  3. 1,2 번 모두 만족하면 상속
  4. 상속 받은 자식들은 자신만의 멤버만 작성하면 된다

부모 클래스 (Parent Class, Super Class)
자식 클래스 (Child Class, Sub Class)

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

자식과 부모의 생성자

부모 클래스에 생성자 정의가 되어있지 않으면 에러!
-> 자식이 생성될 때 부모 생성이 먼저 진행되기 때문

자식 Class의 생성 순서

  1. stack에 자식 참조 변수
  2. heap에 Object 객체 생성
  3. heap의 Object 객체에 부모 객체 추가(묵시적 초기화 일어남)
  4. heap 부모 객체에 자식 멤버 변수 추가됨 (부모와 자식 관계가 메모리에서 실제로 하나의 객체)

-> 상속을 받는다는 표현이지만 자식 변수가 부모 객체를 참조하는 것

super()

부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수

super() 클래스는 따로 입력하지 않아도 기본적으로 생성 됨
-> 때문에 부모 클래스에 생성자가 없으면 에러가 난다
-> super(인자1, 인자2, 인자3);과 같이 입력해주지 않으면 부모의 멤버 변수를 사용하지 못하고
묵시적 초기화 값을 반환 받게 된다

Method Overriding

상속 관계에서 메소드를 재정의 하는 것

  1. 부모의 메소드를 그대로 물려받는다.
  2. 자식의 상태에 맞게 수정하여 사용

Method Overring 규칙

  1. 메소드 선언부는 모두 일치해야 함 (이름, 인자 값, 리턴 타입)
  2. 메소드 구현부는 달라야 함 (기능이 달라짐)
  3. 상속관계의 클래스에서 발생

자식 클래스

필드 -> 부모의 필드를 물려받고 자신만의 필드를 추가
메소드 -> 부모의 메소드를 자식에 맞게 수정하여 사용

자식 생성시 부모의 기본 생성자가 없으면 에러가 난다..!

부모의 값을 받으려면

  1. 자식 생성자에 부모 Class의 필드를 명시적으로 주입
  2. super() 내부에 받은 필드의 인자를 입력
반응형

댓글