[JAVA] this 와 super

캐떠린·2023년 8월 15일

⚠️Warning
본 포스트는 당일 학원에서 배운 내용을 복습하는 목적의 공부 기록 시리즈입니다. 정보 전달의 목적이 아님을 유의해주세요! 잘못된 내용에 대한 피드백을 환영합니다:)


❓ this란?

: 'this'는 참조변수로 인스턴스 자신을 가리킨다. 참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼, 'this'로 인스턴스변수에 접근할 수 있는 것.
생성자의 매개변수로 선언된 변수의 이름과 인스턴스변수가 같을 경우에는 이름만으로는 두 변수가 서로 구별이 안된다. 이런 경우에 인스턴스변수 앞에 'this'를 사용하면 된다.

'this'를 사용할 수 있는 것은 인스턴스 멤버뿐!
static메소드(클래스 메소드)에서는 인스턴스 멤버들을 사용할 수 없는 것처럼, 'this' 역시 사용할 수 없음!
Why? static 메소드는 인스턴스를 생성하지 않고도 호출될 수 있으므로 static 메소드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문.


❓ super란?

: 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수. 멤버변수와 지역변수의 이름이 같을 때 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;
//	}
}
profile
개발자 꿈나무의 모든 공부 기록

0개의 댓글