super와 super()
- 자식 클래스에서 속받은 부모 클래스의 인스턴스(객체)를 가리키는 키워드
사용
- 부모 클래스로부터 상속을 받았기 때문에, 부모의 멤버변수와 메서드를 사용할 수 있는데
- 이 때에 자식 클래스에서 부모 클래스의 멤버들을 구분하기 위해서 사용
super와 super()의 차이
super |
super( ) |
|
|
예제 1 super( )
1. main 메서드 : 실행의 시작
public class StudentTest {
public static void main(String[] args) {
Colleage c = new Colleage();// 객체 생성(생성자 호출)
}
}
2. Colleage(자식 클래스) 는 Student(부모 클래스)를 상속
- 기본 생성자를 호출하는데
- 첫 줄의 super("정공자", 20), 즉 부모 클래스의 매개변수 있는 생성자를 호출하여
- 부모 클래스의 멤버변수(필드)를 초기화 해줌
- 다시 자식 클래스의 생성자로 돌아와서, 자식 클래스의 멤버변수를 초기화 함
- course = 0 (초기화 할 값을 별도로 설정하지 않아, int의 기본값인 0으로 설정)
public class Colleage extends Student {
int course;
public Colleage() {
super("정공자", 20); // 부모 클래스(Student)의 매개변수가 2개 있는 생성자를 호출
System.out.println("[자식] Colleage 클래스 생성자 호출");
System.out.printf("학년 : %d", course);
}
public Colleage(String name, int grade, int course) {
System.out.println("매개변수 3개인 Colleage 생성자 호출");
super.name = name; // 부모클래스(Student)의 멤버변수(name)을 호출
super.grade = grade;
this.course = course; // 생성자의 매개변수명와 멤버변수명이 같을 때
}
}
3. Student(부모 클래스)
- 자식 클래스의 기본 생성자가 부모 클래스의 매개변수가 있는 생성자를 호출함
- 자식 클래스에서 super("정공자", 20)를 호출하였기 때문에
- 즉, 부모 클래스의 Student(String 정공자, int 20)을 실행함
- 매개변수가 있는 생성자를 실행하여, 첫줄 출력하고, 부모 클래스의 멤버변수를 초기화 함
- 가장 첫 줄 출력문인 "[부모] 매개변수 있는 Student 생성자 호출"을 출력하고
- name = 정공자
- age = 20, 값 초기화
public class Student {
String name;
int grade;
public Student() {
System.out.println("[부모] Student 기본 생성자 호출");
}
public Student(String name, int grade) {
System.out.println("[부모] 매개변수 있는 Student 생성자 호출");
this.name = name;
this.grade = grade; // this를 이용하여, 멤버변수(필드)와 매개변수를
// 같은 이름으로 사용할 수 있음
System.out.printf("이름 : %s, 학년 : %d %n", name, grade);
}
}
[실행 결과]
예제 2 super
[ 실행 결과 ]
this와 this( );
사용
- 현재 클래스의 인스턴스(객체)를 기리키는 키워드
this와 this( )의 차이
this |
this( ) |
|
|
this
- 자신의 멤버변수(필드)를 명시적으로 지정할 때 사용
- 생성자의 매개변수(지역변수)와 멤버변수명이 동일한 경우에, 멤버변수명 앞에 붙여서 사용
- this.멤버변수명
- this.name
- this.grade
this( )
- 자신의 다른 생성자를 호출
- 생성자의 첫 줄에서 다른 생성자를 호출
- this( )
- this(매개변수1, 매개변수2...)
[ 주의 ]
반드시! 생성자의 첫 줄에서 호출해야 함
첫 줄이 아닌 곳에서 호출하면, 에러가 발생
'JAVA' 카테고리의 다른 글
[JAVA] 싱글톤 패턴(만드는 방법, 사용하는 이유, 장단점) (0) | 2024.04.22 |
---|---|
[JAVA] 메서드 오버라이딩, 오버로딩과 오버라이딩 (0) | 2024.04.21 |
[JAVA] 다형성, 참조변수의 형변환(업캐스팅, 다운캐스팅) (1) | 2024.04.19 |
[JAVA] JAVA 메모리 영역(method, stack, heap 영역) (0) | 2024.04.19 |
[JAVA] 접근 제한자(public < protected < default < private) (0) | 2024.04.18 |