⚠️Warning
본 포스트는 당일 학원에서 배운 내용을 복습하는 목적의 공부 기록 시리즈입니다. 정보 전달의 목적이 아님을 유의해주세요! 잘못된 내용에 대한 피드백을 환영합니다:)
: 'this'는 참조변수로 인스턴스 자신을 가리킨다. 참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼, 'this'로 인스턴스변수에 접근할 수 있는 것.
생성자의 매개변수로 선언된 변수의 이름과 인스턴스변수가 같을 경우에는 이름만으로는 두 변수가 서로 구별이 안된다. 이런 경우에 인스턴스변수 앞에 'this'를 사용하면 된다.
'this'를 사용할 수 있는 것은 인스턴스 멤버뿐!
static메소드(클래스 메소드)에서는 인스턴스 멤버들을 사용할 수 없는 것처럼, 'this' 역시 사용할 수 없음!
Why? static 메소드는 인스턴스를 생성하지 않고도 호출될 수 있으므로 static 메소드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문.
: 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수. 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버와 이름이 같을 때는 super를 붙여서 구별할 수 있다.
this vs super
- 객체 지정 연산자
- this: 자기 자신
- super: 부모
public class Ex68 {
public static void main(String[] args) {
//Ex68 > this & super
//this vs super
// - 객체 지정 연산자
// - this: 자기 자신
// - super: 부모
CupParent p1 = new CupParent();
p1.check();
System.out.println();
CupChild c1 = new CupChild();
c1.check();
System.out.println();
}//main
}//class
class CupParent {
private int a = 10;
public int b = 20;
public void check() {
System.out.println(this.a);
System.out.println(this.b);
}
}
class CupChild extends CupParent {
private int c = 30;
public int d = 40;
public void check() {
System.out.println(this.c);
System.out.println(this.d);
//System.out.println(this.a); //The field CupParent.a is not visible
//System.out.println(this.b);
super.check();
}
// public CupChild(int c, int d) {
// //super(); //부모의 생성자 호출 > 직접 호출하지 않아도 자동으로 호출되기 때문에 지워도 No상관
// this.c = c;
// this.d = d;
// }
}