Day13 - super

2021. 3. 4. 19:05JAVA 공부

이번에는 오늘의 마지막 super 를 배워 봅시다

 

super

저희는 이미 super 라는 걸 대충 알고 있습니다.

부모 클래스 를 영어로 뭐라 그러죠? super class 자식 클래스를 sub class 라고 합니다.

그러면 super 라는 기능을 예상해 볼수 있겠죠?

부모 클래스를 가리키는 기능 입니다.

 

이미 배운 this 가 부모 클래스를 가르키는 super 가 된다고 생각하면 됩니다.

 

이 점 생각하면서 본론으로 들어가 봅시다

 

- super 는 한단계 위 부모클래스의 객체를 지정할 때 사용하는 키워드 입니다.

- super. 을 사용하면 부모클래스의 멤버를 참조할 수 있습니다.

- super() 는 생성자 내부에서만 사용이 가능하며, 부모클래스의 생성자를 호출하는데 사용합니다.

- 생성자의 첫 라인에는 반드시 this(), super()가 있어야 하는데 이를 기술하지 않으면, 묵시적으로 super() 가 삽입되어 부모 클래스의 기본 생성자를 자동으로 호출합니다

- 생성자 내부에서 또다른 생성자를 호출할 때는 this(), super() 반드시 생성자 블록 내부의 첫 라인에 기술해야 합니다.

 

 

하나씩 예제를 보면서 확인 해 봅시다.

 

먼저, 부모 클래스와 자식 클래스를 하나씩 만들어 줄게요

부모 클래스 Person 를 상속 받는 자식 클래스 Student 를 만들어 봅시다

자식 클래스 Student는 부모 클래스 Person의 멤버변수 name, age 메서드 info 를 가지고 있겠죠?

그런데, Student 에서도 멤버변수 name, age 를 가지고 있으면 상속받은 부모의 멤버변수 인지, Student가 가지고 있는 멤버 변수인지 어떻게 알아요?

이럴 때, super. 를 써서 부모 클래스꺼 라고 알려주는 겁니다.

여기서 각각 super.name 과 this.name 에 마우스를 올려 보시면, super.name 은 Person의 name 이라고 나오고, this.name 은 Student의 name 이라고 나옵니다.

 

이번에는 super() 에 대해 생각해 봅시다.

this() 가 뭐였죠? 자기 자신의 생성자 였죠?

super() 도 똑같습니다. 부모의 생성자 입니다.

그리고 사실, super()를 따로 사용하지 않으면 , 겉으로는 안보이지만 실제로는 있는 거 였습니다.

흐름을 생각해 봅시다.

Student 객체가 만들어지면, Student() 생성자를 실행하고, 그 안에서 super() -> 부모클래스 생성자 를 실행하는 겁니다.

즉. 여태까지 상속을 받았을 때 , 상속을 받은 클래스의 멤버변수, 메서드 를 사용할 수 있었던 것은, 부모클래스의 생성자를 실행했기 때문 이었습니다.

그리고 super()는 따로 써주지 않으면 저절로 알아서 사용이 되기 때문에, 부모 클래스의 생성자에는 기본 생성자 -> Person() 이 무조건 있어야 합니다.

기본생성자 -> Person() 을 지워 봅시다.

그러니까 이렇게 오류가 납니다. super()를 사용하지 않으면 알아서 super() 가 실행이 되기 떄문인데, 부모 클래스인 Person에 기본생성자( Person() ) 가 없죠?

그러면 super() 에도 매개변수가 들어갈 수 있을 것 같지 않으세요?

이렇게 super("사라만") 을 써주니까 오류가 사라졌습니다.

 

이번에는, Person 이 가진 멤버변수 name, age 를 super() 를 써서 생성자를 호출하고, 기존에 Student 가 가지고 있던 StudentId 만 따로 초기화 해줄 겁니다.

 

이렇게 super 에 대해 알아 봤는데, 마지막으로 객체의 구조에 대해 잠깐 이야기 하고 갑시다.

 

사실 저희는 따로 상속을 받는것도 아닌데 사용할 수 있는 메서드들이 있었어요.

상속을 받지 않는 Person 클래스인데, p 에 . 을 찍으니까 사용할 수 있는 메서드 들이 많이 나오죠?

정의된 클래스 이름을 보니까 Object 라고 써져 있네요?

사실 클래스는 모두 Object 라는 클래스를 상속 받고 있습니다. 따로 써주지 않으면 생략이 되는거에요

 

이렇게 super 에 대해 알아 보았습니다.

 

고생하셨습니다.

'JAVA 공부' 카테고리의 다른 글

Day14 - 캡슐화, 정보 은닉 / setter , getter  (0) 2021.03.06
Day14 - 접근 제한자  (0) 2021.03.05
Day13 - this  (0) 2021.03.04
Day13 - 오버로딩  (0) 2021.03.04
Day12 - 오버라이딩  (0) 2021.03.04