본문 바로가기
JAVA

[JAVA] super와 super(), this와 this()

by 정공자씨 2024. 4. 21.

 

super와 super()

  • 자식 클래스에서 속받은 부모 클래스의 인스턴스(객체)를 가리키는 키워드

 

사용

  • 부모 클래스로부터 상속을 받았기 때문에, 부모의 멤버변수와 메서드를 사용할 수 있는데
  • 이 때에 자식 클래스에서 부모 클래스의 멤버들을 구분하기 위해서 사용

 

 

super와 super()의 차이

super

super( )

  • 부모 클래스의 멤버변수(필드)를 지정  
  • 부모의 생성자를 호출하는 메서드

 

 

예제 1   super( )

 

1. main 메서드 : 실행의 시작

public class StudentTest {
    public static void main(String[] args) {

        Colleage c = new Colleage();// 객체 생성(생성자 호출)	
    }
}

 

 

2. Colleage(자식 클래스) 는 Student(부모 클래스)를 상속

  • 기본 생성자를 호출하는데
  • 첫 줄의 super("정공자", 20), 즉 부모 클래스의 매개변수 있는 생성자를 호출하여
    • 부모 클래스의 멤버변수(필드)를 초기화 해줌
  • 다시 자식 클래스의 생성자로 돌아와서, 자식 클래스의 멤버변수를 초기화 함 
    • course = 0 (초기화 할 값을 별도로 설정하지 않아, int의 기본값인 0으로 설정) 
public class Colleage extends Student {

    int course;

    public Colleage() { 
        super("정공자", 20); // 부모 클래스(Student)의 매개변수가 2개 있는 생성자를 호출
        System.out.println("[자식] Colleage 클래스 생성자 호출");
        System.out.printf("학년 : %d", course);
    }

    public Colleage(String name, int grade, int course) {
        System.out.println("매개변수 3개인 Colleage 생성자 호출");

        super.name = name; // 부모클래스(Student)의 멤버변수(name)을 호출
        super.grade = grade;
        this.course = course; // 생성자의 매개변수명와 멤버변수명이 같을 때		
    }
}

 

 

3. Student(부모 클래스)

  • 자식 클래스의 기본 생성자가 부모 클래스의 매개변수가 있는 생성자를 호출
    • 자식 클래스에서 super("정공자", 20)를 호출하였기 때문에
    • 즉, 부모 클래스의  Student(String 정공자, int 20)을 실행함
  • 매개변수가 있는 생성자를 실행하여, 첫줄 출력하고, 부모 클래스의 멤버변수를 초기화 함 
    • 가장 첫 줄 출력문인 "[부모] 매개변수 있는 Student 생성자 호출"을 출력하고
    • name = 정공자
    • age = 20, 값 초기화
public class Student {

    String name;
    int grade;

    public Student() {
        System.out.println("[부모] Student 기본 생성자 호출");
    }
	
    public Student(String name, int grade) {
        System.out.println("[부모] 매개변수 있는 Student 생성자 호출");

        this.name = name;
        this.grade = grade; // this를 이용하여, 멤버변수(필드)와 매개변수를
                            // 같은 이름으로 사용할 수 있음
        System.out.printf("이름 : %s, 학년 : %d  %n", name, grade);
    }
}

 

[실행 결과]

 

 

예제 2   super

 

[ 실행 결과 ]

 

 

 

 

 

 

 

this와 this( );

사용

  • 현재 클래스의 인스턴스(객체)를 기리키는 키워드

 

this와 this( )의 차이

this

this( )

  • 자신의 멤버변수(필드)를 명시적으로 지정
  • 자신의 다른 생성자를 호출

 

 

this 

  • 자신의 멤버변수(필드)를 명시적으로 지정할 때 사용
  • 생성자의 매개변수(지역변수) 멤버변수명이 동일한 경우에, 멤버변수명 앞에 붙여서 사용
  • this.멤버변수명
    • this.name
    • this.grade

 

 

this( )

  • 자신의 다른 생성자를 호출
  • 생성자의 첫 줄에서 다른 생성자를 호출
    • this( )
    • this(매개변수1, 매개변수2...)
[ 주의 ] 
반드시! 생성자의 첫 줄에서 호출해야 함
첫 줄이 아닌 곳에서 호출하면, 에러가 발생