[Java] this와 super
this와 super.
많이 보긴하는데, 헷갈릴 때가 있다.
또한 this와 this(), super와 super()의 차이.
더 상세하게 알아보고 기억하기 위해 기록한다.
아래의 코드는 정보관리 시스템을 할 때 사용한 코드이다.
2022.06.13 - [프로그래밍 언어/Java] - [Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기
public Student(String name, int age, int height, int weight, String studentId, int grade, double gPA) {
//상속받은 클래스의 매개변수를 가진 super 생성됨.
super(name, age, height, weight);
this.studentId = studentId;
this.grade = grade;
this.GPA = gPA;
}
이 코드를 중심으로 super와 this를 좀 더 살펴보겠다.
1. this, this()
- this : 현재 클래스의 인스턴스(나)를 의미한다. 즉, 현재클래스의 멤버변수를 지정할 때 사용한다.
생성자의 매개변수로 선언된 변수의 이름이 인스턴스 변수와 같을 때 인스턴스 변수와 지역변수를 구분하기 위해서 사용한다.
위의 코드에서는 this.studentId = studentId;를 통해 알 수 있다.
무엇인가를 통해 받아들인 코드의 String StudentId를 통해 새로운 변수를 받게 된다.
그것을 현재의 멤버변수로 설정하기 위해 this. 을 쓰는 것이다.
+
static 메서드에서는 this를 사용하지 못한다.
- this() : 같은 클래스의 다른 생성자를 호출할 때 사용한다.
Car(){
this("white", "auto", 4); // Car(String color, string gearType, int door)를 호출
}
Car(String color){
this(color, "auto", 4);
}
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
맨 아래의 생성자가 있는데, 그것을 중심으로, 위의 두 개의 생성자가 맨 밑의 생성자를 호출하는 것이다.
두 번째 생성자는 String color 만을 매개변수로 받아 color만 다르게 입력할 수 있도록 하고 있다.
2. super, super()
- super : 자식 클래스에서 부모 클래스의 멤버를 참조할때 사용한다.
예를 들어, 오버라이딩을 했지만, 부모 클래스의 메소드를 한 번 쓰고 싶을 때,
super.메소드();를 하게 되면, 그 라인만은 부모 메소드를 참조하여 연산을 하게 된다.
- super() : 자식 클래스가 자신을 생성할 때 부모 클래스의 생성자를 불러 초기화 할때 사용한다.
public Student(String name, int age, int height, int weight, String studentId, int grade, double gPA) {
//상속받은 클래스의 매개변수를 가진 super 생성됨.
super(name, age, height, weight);
this.studentId = studentId;
this.grade = grade;
this.GPA = gPA;
}
이것을 다시보면, name, age, height, weight는 부모의 매개변수이다.
이를 불러 자식 클래스에서 초기화 한 것이다.
이것을 참고하고, 나머지 새로운 studentId, grade, GPA만 this.로 받는 것을 알 수 있다.
'Web' 카테고리의 다른 글
[HTML/CSS] HTML 태그 모음 (0) | 2022.06.15 |
---|---|
[HTML/CSS] HTML/CSS란? (0) | 2022.06.15 |
[Java] Overloading, Overriding (0) | 2022.06.15 |
[Java] 다형성(Polymorphism) 알아보기 (0) | 2022.06.13 |
[Java] 추상, 인터페이스 (0) | 2022.06.13 |
댓글