Java

super와 this

화요밍 2022. 5. 20. 15:41
728x90
반응형
this
  • 생성자 this()

생성자에서 같은 클래스의 다른 생성자를 호출할 때 this(), this(매개변수)를 사용합니다.

한 생성자에서 다른 생성자를 호출 할 때는 반드시 첫 줄에서만 호출이 가능합니다.

왜냐하면 생성자 내에서 초기화 작업도중 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화하기 때문에 호출하기 이전에 작업한 초기화가 무의미해지기 때문입니다.

 

  • 인스턴스 변수 this

인스턴스 변수를 생성자 내에서 호출할 떄에는 this라는 참조변수를 활용하면 됩니다.

this는 멤버변수와 지역변수의 이름이 같을 때 구분하기 위해서 사용됩니다.

this에는 인스턴스의 주소가 저장되어 있으며 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재합니다.

 


super
  • 인스턴스 변수 super

super는 자식 클래스에서 부모 클래스로부터 상속받은 데이터를 참조하는데 사용되는 참조 변수입니다.

상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때 super을 사용해 구분할 수 있습니다.

모든 인스턴스 메서드에는 자신이 속한 인스턴스의 주소가 지역변수로 저장되는데, 이것이 참조 변수인 this와 super입니다.

static 메서드는 인스턴스와 관련이 없기 때문에, this와 super을 사용할 수 없다.

class Parent {
    int x = 10;
}

class Child extends Parent {
    int x = 20;
    
    void method() {
    	System.out.println("x = " + x);
        System.out.println("this.x = " + this.x);
        System.out.println("super.x = " + super.x);
    }
}

class SuperTest2 {
    public static void main(String args[]) {
    	Child c = new Child();
        c.method();
    }
}
//출력
x = 20
this.x = 20
super.x = 10

 

  • 생성자 super()

부모 클래스의 생성자를 호출하는데 사용됩니다.

자식 클래스의 인스턴스를 생성하면, 자식의 멤버와 부모의 멤버가 모두 합쳐진 하나의 인스턴스가 생성됩니다.

따라서 자식 클래스의 인스턴스가 부모 클래스의 멤버들을 사용할 수 있습니다.

자식 생성자의 첫 줄에 부모 클래스의 생성자를 호출해야 하는데, 그 이유는 자식 클래스의 멤버가 부모 클래스의 멤버를 사용할 수 있기 때문에 부모 클래스의 멤버들이 먼저 초기화되어야 하기 때문입니다.

 

이러한 부모 클래스 생성자 호출은 클래스의 상속관계를 거슬러 올라가서 마지막으로 모든 클래스의 최고 조상인 Object 클래스의 생성자인 Object()까지 호출되고 끝이 납니다.

첫 줄에 부모 클래스의 생성자를 호출하지 않으면, 컴파일러가 생성자의 첫 줄에 super();를 자동적으로 추가합니다.

728x90
반응형

'Java' 카테고리의 다른 글

다형성 Polymorphism  (0) 2022.05.23
제어자 Modifier  (0) 2022.05.20
상속 Inheritance  (0) 2022.05.20
오버로딩(Overloading)과 오버라이딩(Overriding)  (0) 2022.05.19
객체지향 프로그래밍(OOP, Object-Oriented Programming)  (0) 2022.05.19