본문 바로가기
Backend/Java

Java 기초 문법 : this와 super()

by 코딩쥐 2024. 6. 10.

this

this는 현재 객체를 참조하는 키워드로 메서드나 생성자 내부에서 해당 객체의 인스턴스를 가리킨다. 

 

용도

  • 인스턴스 변수와 매개변수를 구분 : 생성자나 메서드의 매개변수 이름과 인스턴스 변수 이름이 같을 때 사용
  • 생성자 간 호출 : 같은 클래스 내의 다른 생성자 호출 
  • 현재 객체의 메서드 호출 
package com.example1;

public class Example2 {
    String color;

    // 기본생성자
    Example2(){
        // Example2(String color) 생성자를 this로 호출해서 사용
        this("white");
    }

    Example2(String color){
        // 인스턴스 변수와 매개 변수 구분
        this.color = color;
        // 현재 객체의 메서드 호출
        this.changeColor();
    }

    void changeColor(){
        System.out.println("색이 변경되었습니다.");
    }

    public static void main(String[] args) {
        Example2 example = new Example2("blue");
        System.out.println(example.color);
    }
}

 

super

this는 자기자신을 가리켰듯이 super는 부모를 가리키는 키워드이다.


용도

  • 부모 클래스의 속성 및 메서드 접근 : 자식 클래스에서 부모클래스의 필드나 메서드 사용
  • 부모 클래스 생성자 호출 : 자식 클래스의 생성자에서 super()를 사용하여 부모클래스의 생성자를 호출한다.
package com.example1;

public class ChildClass extends ParentClass {
    public ChildClass() {
    //부모클래스 생성자 호출
        super(100, false);
    }

    @Override
    public void method1() {
        // 부모 클래스의 method1()을 가지고 옴
        super.method1();
        // 오버라이드 시행하여 method1()을 덮어씌움
        System.out.println("자식클래스 :method1");
    }

    // 참조하는 생성자가 따로 있어야 한다.
    public void method3() {
        // this에서 method2()까지 가지 않으면 super()로 넘어가서 탐색함.
        this.method2();
    }

    public static void main(String[] args) {
        ChildClass chc1 = new ChildClass();
        chc1.method3(); 
        chc1.method1(); 
        System.out.println(chc1.a1); 
        System.out.println(chc1.b1);
    }
}
package com.example1;

public class ParentClass {
    public int a1;
    public boolean b1;

    // 생성자는 상속이 안되고 참조만 가능하다.
    public ParentClass(int a1, boolean b1){
        this.a1 = a1;
        this.b1 = b1;
    }

    public void method1(){
        System.out.println("부모 클래스 : method1");
    }

    public void method2(){
        System.out.println("부모 클래스 : method2");
    }

}

 

자식 클래스에서 this를 사용하면 자식 클래스 내의 변수나 메서드를 먼저 찾는다. 만약 없으면 부모 클래스에서 찾게 된다. super의 경우 부모클래스의 시작지점에서부터 해당 속성이나 메서드를 찾고, 만약 여러 부모클래스가 있을 경우 가장 가까운 부모클래스가 우선적으로 참조된다.