강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • CSS 속성
  • til
  • 자바
  • 백준
  • 메서드
  • 메소드
  • 알고리즘 공부
  • CSS 박스 크기 설정

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

[Java] super 키워드와 super() 메서드
Langauge/Java-basic

[Java] super 키워드와 super() 메서드

2022. 8. 3. 17:01

super 키워드와 super() 메서드 요약

  • 공통적으로 상속 관계를 전제로 한다.
  • super. : 상위 클래스 객체 호출
  • super() : 상위 클래스 생성자 호출

super 키워드

상위 클래스의 멤버를 가리키는 역할을 한다.

상위 클래스의 필드명과 하위 클래스의 필드명이 중복될 때 상위 클래스의 필드를 호출할 때 사용한다.

메서드 오버라이딩으로 가려진 상위 클래스의 필드 또는 메서드를 호출하기 위해 사용한다.

즉, super 키워드를 사용하면 상위 클래스의 멤버를 사용할 수 있다.

super 키워드 구조

// super. 키워드
super.상위 클래스의 멤버

super.필드

상위 클래스의 필드명과 하위 클래스의 필드명이 중복될 때 상위 클래스의 필드를 호출

// super.필드
class Upper {
    int count = 20; // Upper.conut
}

class Lower extends Upper {
    int count = 15; // Lower.count

    void callNum() {
        System.out.println("count = " + count); // count = 15
        System.out.println("this.count = " + this.count); // this.count = 15
        // 하위 클래스에서 상위 클래스의 count를 호출하는 방법(super.)
        System.out.println("super.count = " + super.count); // super.count = 20
    }
}

super.메서드()

메서드 오버라이딩으로 가려진 상위 클래스의 필드 또는 메서드를 호출

class Upper {
    public void print() {
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
    }
}
// super 키워드 사용 x
// 단지 6을 출력하는 코드 한 줄을 추가하는데 다시 1~5 출력문을 작성해야 해서 번거롭다.
class MyClass extends Upper {
    @Override
    public void print() { 
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
        System.out.println(6);
    }
}
// super.메서드()
class Lower extends Upper {
    @Override // 메서드 오버라이딩
    public void print() {
        super.print(); // Upper 클래스의 print()메서드 호출
        System.out.println(6);
    }
}

super() 메서드

  • this() 메서드가 현재 클래스의 생성자를 호출하는 역할이라면 super()은 상위 클래스의 생성자를 호출하는 역할이다.
  • this()와 마찬가지로 생성자 안에서만 사용 가능하고, 반드시 첫 줄에 위치해야 한다.
  • 모든 생성자의 첫 줄에는 반드시 this() 또는 super()가 선언되어야 한다.
  • super()가 없는 경우 컴파일러는 생성자의 첫 줄에 자동으로 super()를 추가한다.
    -> 하위 클래스의 생성자를 이용해 인스턴스를 생성할 때 상위 클래스의 인스턴스가 먼저 생성되는 이유
public class Main {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("===구분선===");
        B b = new B();
        System.out.println("===구분선===");
        C c = new C();
    }
}
class A {
    public A() {
        System.out.println("A 생성자 호출");
    }
}
class B extends A {
    public B() {
        // super() 컴파일러가 자동으로 추가
        System.out.println("B 생성자 호출");
    }
}
class C extends A {
    public C() {
        super();
        System.out.println("C 생성자 호출");
    }
}

실행 결과

super() 주의사항

  • 하위 클래스 생성자 내부에 super()가 없는 경우 컴파일러가 생성자의 첫 줄에 자동으로 super()를 삽입한다.
  • super() 형태만 봐도 매개변수를 받지 않는 기본 생성자라는 것을 알 수 있다.
  • 따라서 상위 클래스에 기본 생성자가 없으면 상위 클래스의 기본 생성자를 추가하려고 하는데 기본 생성자를 찾을 수 없어 다음과 같이 에러가 발생한다.
  • 방지 : 상위 클래스에 기본 생성자를 따로 추가 또는 super(매개변수)의 형태로 super() 메서드를 따로 추가하는 방법이 있다.

super() == 상위클래스() == 기본 생성자

저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] 추상 클래스와 추상 메소드 (abstract 제어자)  (0) 2022.08.05
[Java] 클래스의 정점, Object 클래스  (0) 2022.08.04
[Java] 메서드 오버라이딩(Method Overriding)  (0) 2022.07.31
[Java] instanceof : 캐스팅 가능 여부 확인  (0) 2022.07.30
[Java] 업 캐스팅과 다운 캐스팅  (0) 2022.07.30
    'Langauge/Java-basic' 카테고리의 다른 글
    • [Java] 추상 클래스와 추상 메소드 (abstract 제어자)
    • [Java] 클래스의 정점, Object 클래스
    • [Java] 메서드 오버라이딩(Method Overriding)
    • [Java] instanceof : 캐스팅 가능 여부 확인
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바