[Java] Java의 정석 정리 (super)

송병훈·2022년 9월 25일
0

자바의 정석

목록 보기
7/15
post-thumbnail

이 게시물보다 4개 전에 this에 대해 공부했었죠?

this는 이렇게 쓰인다고 했어요.

변수에 쓰이면 "이 클래스의 전역변수"
생성자에 쓰이면 "이 클래스의 생성자"

그럼 super 키워드는 어떻게 쓰는 걸까요?


super

super는 상속과 관련이 있어요

참조변수 super

자식클래스에서 super를 사용하면,
부모클래스의 멤버를 호출해요
이해하기 쉽도록 코드를 보죠

class SuperTest2 {
	public static void main(String args[]) {
		Child c = new Child();
		c.method();
	}
}
class Parent {
	int x=10;
}

class Child extends Parent {	// 상속받음
	int x=20;

	void method() {
		System.out.println("x=" + x);				// 20 출력
		System.out.println("this.x=" + this.x);		// 20 출력
		System.out.println("super.x="+ super.x);	// 10 출력
	}
}

this와 super를 동시에 썼어요
this.x 는 Child 클래스의 전역변수 x를 출력하고
super.x 는 Parent 클래스의 전역변수 x를 출력하죠

조상의 생성자 super()

조상의 멤버를 상속받은 자손클래스에서 인스턴스를 생성할 때
조상의 멤버와 자손의 멤버가 합쳐진 하나의 인스턴스가 생성됩니다.

자손클래스에서 인스턴스를 생성할 때
생성자가 실행되겠죠.

근데 이 생성자는 기본적으로
자손클래스의 멤버에 대해서만 초기화를 할 겁니다.

그럼 조상클래스의 멤버들은 어떻게 초기화 되는 걸까요?
조상클래스의 생성자는 어디 있는 건가요?

여기서 Java 규칙 하나가 등장합니다.

Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는
생성자(조상의 생성자 or 같은 클래스의 다른 생성자)를 호출해야 한다.

자손의 생성자의 첫 문장에 조상의 생성자를 호출하는 코드가 없으면,
컴파일러가 자동적으로 조상의 생성자를 호출하는 코드인
super(); 를 생성자의 첫 줄에 삽입한다.

이렇게 자손 -> 조상 클래스로 생성자가
연쇄적으로 실행되며 인스턴스가 생성됩니다.

--

정리해보면, super 키워드도 this 와 비슷하죠.

변수에 쓰이면 "부모클래스의 전역변수"
생성자에 쓰이면 "부모클래스의 생성자"

이상입니다!!
고생하셨어요 : )

profile
성실하고 꼼꼼하게

0개의 댓글