Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[2주차] 42. 멤버변수의 'super' 본문

K-DigitalTraining 강의/1. Java

[2주차] 42. 멤버변수의 'super'

이대곤 2022. 5. 26. 10:38

* super.멤버변수로 부모의 멤버변수에 접근할 때, 부모의 멤버변수가 private이 아닌 경우에만 접근이 가능하다.

 

* 자식클래스에서 부모의 멤버함수를 오버라이딩 하더라도 부모의 멤버함수에 접근이 가능하듯이

  자식클래스에서 같은 이름으로 멤버변수를 선언해도, 부모의 멤버변수에 접근이 가능하다.

  즉 덮여 씌워지는게 아닌, 아래와 같이 둘다 메모리에 존재하는 상태가 되어 언제든 둘 다 접근이 가능함.

  단, 자식클래스에 같은 이름으로 멤버변수가 선언되어 있지 않는 경우에는 this.변수를 하면 부모의 것이 불린다.

  => 코드1, 코드2를 비교

코드1

class Parent {
	int x = 10;

	void method() {
		System.out.println("P_x:" + x);
	}
}// Parent

class Child extends Parent{
	int x = 20;

	void method() {
		System.out.println("this.x:" + this.x);    // Child의 x가 출력됨
		System.out.println("super.x:" + super.x);  // Parent의 x가 출력됨
	}
}// Child

public class Ex06_06_super {
	public static void main(String[] args) {
		Child c = new Child();
		c.method();
	}
}

실행결과

this.x:20
super.x:10

코드2

class Parent {
	int x = 10;

	void method() {
		System.out.println("P_x:" + x);
	}
}// Parent

class Child extends Parent{
	//int x = 20;

	void method() {
		System.out.println("this.x:" + this.x);    //Parent의 x가 출력됨
		System.out.println("super.x:" + super.x);  //Parent의 x가 출력됨
	}
}// Child

public class Ex06_06_super {
	public static void main(String[] args) {
		Child c = new Child();
		c.method();
	}
}

실행결과

this.x:10
super.x:10

 

 
 
Comments