ID_DI
DI's study notes
ID_DI
전체 방문자
오늘
어제
  • 분류 전체보기 (85)
    • Deep-Learning (3)
      • CNN (2)
      • NLP (1)
    • Data_Python (6)
      • Numpy (0)
      • Matplotlib (4)
    • Python (8)
      • Python Algorithm (6)
    • Java (36)
      • Java(base) (33)
      • Java practice(base) (2)
    • Git (12)
    • Algorithm (7)
    • etc (7)
    • linux (1)
    • DeskSetup (0)
    • TIL_모각코 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • java.lang
  • staged
  • java 기초
  • git add.
  • git
  • 정렬
  • 커밋
  • matplotlib
  • java
  • binarySearch
  • string to int
  • 자바
  • 알고리즘
  • java.net
  • 합병정렬
  • 파이썬
  • README.md
  • java base
  • Github
  • Python

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ID_DI

DI's study notes

[Java] 상속(inheritance), 자식클래스 생성자, super()
Java/Java(base)

[Java] 상속(inheritance), 자식클래스 생성자, super()

2021. 11. 29. 17:25

상속(inheritance)

  1. 기존에 선언된 클래스의 필드를 다른 클래스에서 사용하고자 할 때
    • 실제 필드를 전달하는 것이 아닌 관계를 정의하는 개념
  2. 클래스들을 만들다 보니 공통요소가 보여서 부모로 묶은 후 상속시켜 주어서 사용하고자 할 때
class A{
    A의 필드
}
class B extends A{
    B의 필드 + A의 필드
}

B obj = new B();
//obj 객체는 실제로는 A의 필드와 B의 필드를 둘 다 가진다.

A : 부모클래스/상위클래스, 슈퍼클래스/기반클래스

B : 자식클래스/하위클래스, 서브클래스/파생클래스

객체를 만들 때 클래스 사용 :

자식클래스의 생성자

생성자가 호출되었을 때

부모클래스의 필드가 먼저 생성되고, 자식클래스의 필드가 함께 복사되고, 객체는 그것을 가르킨다.

super()

  • 부모클래스의 생성자를 호출

자식클래스 생성자 호출시 일어나는 일

  • 자식 클래스의 객체는 자식 생성자를 호출하여 객체화 진행
  • 메모리에 자식클래스의 필드만 올라갔다면, 자식 객체로 절대 부모클래스에 있는 필드들은 접근할 수 없다.
  • 자식 생성자를 호출하게 되면, 자동으로 부모의 생성자가 먼저 호출이 된다.
  • 자식의 필드가 부모의 필드에 붙어 필드가 완성이 된다.
  • 자식 객체는 부모필드가 메모리에 먼저 생성되어 있기 때문에 부모의 필드들도 접근할 수 있게 된다.
  • 자식 생성자 첫줄에는 항상 super클래스의 생성자가 호출된다.
  • 명시적으로 적지 않을시에는 보이진 않지만 super(); 호출
class Car{
    String brand;
    String color;
    int price;

    public Car() {
        //기본생성자
    }

    public Car(String brand, String color, int price) {
        this.brand = brand;
        this.color = color;
        this.price = price;
    }

    void engineStart() {
        System.out.println(brand+" 시동켜기");
    }

    void engineStop() {
        System.out.println(brand+" 시동 끄기");
    }
}

class SuperCar extends Car{
    String pw;

    public SuperCar() {
        //super() 생략했을 경우, 보이지는 않지만, 부모클래스의 기본생성자 호출
        super(); // 첫번째로 써줘야함, super : 부모클래스를 지칭(Car())
    }

    public SuperCar(String brand, String color, int price, String pw) {
        super(brand, color, price); //명시적으로 부모의 클래스의 생성자를 호출
        //pw는 부모의 필드가 아닌, 자식의 필드이기 때문에 직접 세팅
        this.pw = pw;
    }

    void roofOpen() {
        System.out.println(brand+ " 뚜껑 열기");
    }
}

'Java > Java(base)' 카테고리의 다른 글

[Java] static (정적) : 모든 객체가 공유  (0) 2021.11.29
[Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩)  (0) 2021.11.29
[Java] 클래스의 개념, 선언, 사용, 생성자, this  (0) 2021.11.29
[Java] storage class(저장 기억 부류) : 변수 종류 //지역변수 전역변수 정적 변수  (0) 2021.11.29
[Java] 메소드 Method  (0) 2021.11.29
    'Java/Java(base)' 카테고리의 다른 글
    • [Java] static (정적) : 모든 객체가 공유
    • [Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩)
    • [Java] 클래스의 개념, 선언, 사용, 생성자, this
    • [Java] storage class(저장 기억 부류) : 변수 종류 //지역변수 전역변수 정적 변수
    ID_DI
    ID_DI
    Computer Vision

    티스토리툴바