일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 10866
- 테슬라폰
- 물리구성도
- 다형성
- 계층화
- 역캡슐화
- java
- 상속
- 백준 1712
- 인프콘
- 논리구성도
- 유선LAN
- 1764
- 네트워크
- 데이터 송수신
- network
- 자바의 정석
- 자바
- 백준 2775
- 파이썬
- AWS CLF
- 파이썬 1712
- aws 자격증
- l3 스위치
- 프로토콜
- modifiers
- TCP/IP
- 개발바닥
- 남궁성
- 인터페이스
- Today
- Total
병훈's Blog
[Java] super 본문
이 게시물보다 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 와 비슷하죠.
변수에 쓰이면 "부모클래스의 전역변수"
생성자에 쓰이면 "부모클래스의 생성자"
이상입니다!!
고생하셨어요 : )
'Java' 카테고리의 다른 글
[Java] 제어자 (Modifiers) (0) | 2022.09.28 |
---|---|
[Java] package와 import (0) | 2022.09.28 |
[Java] 오버라이딩 (Overriding) (0) | 2022.09.26 |
[Java] 상속 (Inheritance) (0) | 2022.09.26 |
[Java] 초기화 (initialized) (0) | 2022.09.25 |