본문 바로가기
JAVA/개념정리

[JAVA] Super

by JJH0100 2022. 10. 12.
728x90
반응형

Super

첫 번째는 하위 클래스에 의해 가려진 상위 클래스의 멤버 변수나 메소드에 접근할 때 사용
두 번째는 상위 클래스의 명시적 생성자를 호출하기 위해 사용

 

 

하위 클래스에 의해 가려진 상위 클래스의 멤버 변수나 메소드에 접근할 때

코드

class D1{
	public int x = 1000;
	public void display() {
		System.out.println("상위 클래스 D1의 display() 메소드입니다.");
	}
}
class D2 extends D1{
	public int x = 2000;
	public void display() {
		System.out.println("하위 클래스 D2의 display() 메소드입니다.");
	}
	public void write() {
		display();
		super.display();
		System.out.println("D2 클래스 객체의 x 값은 : " + x);
		System.out.println("D1 클래스 객체의 x 값은 : " + super.x);
	}
}
public class SuperTest2 {
	public static void main(String[] args) {
		D2 d = new D2();
		d.write();
	}
}

결과

 

 

 

상위 클래스의 명시적 생성자를 호출

코드

class SD1{
	public int i1;
	public double d1;
	public SD1(int i1) {
		System.out.println("SD1(int i1) 생성자 수행");
		this.i1 = i1 * i1;
		System.out.println(i1 + "의 2제곱은 : " + this.i1);
	}
	public SD1(double d1) {
		System.out.println("SD1(double d1) 생성자 수행");
		this.d1 = d1 * d1;
		System.out.println(d1 + "의 2제곱은 : " + this.d1);
	}
}
class Sub1 extends SD1{
	public Sub1(int i1) {
		super(i1);
		System.out.println("Sub(int i1) 생성자 수행");
		this.i1 = this.i1 * i1;
		System.out.println(i1 + "의 3제곱은 : " + this.i1);
	}
	public Sub1(double d1) {
		super(d1);
		System.out.println("Sub(double d1) 생성자 수행");
		this.d1 = this.d1 * d1;
		System.out.println(d1 + "의 3제곱은 : " + this.d1);
	}
}
public class SuperTest3 {
	public static void main(String[] args) {
		Sub1 sub1 = new Sub1(10);
		System.out.println();
		Sub1 sub2 = new Sub1(10.5);
	}
}

 

결과

728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

[JAVA] 다형성  (0) 2022.10.13
[JAVA] Object 클래스  (0) 2022.10.12
[JAVA] 상속과 메소드 오버라이딩(overriding)  (0) 2022.10.12
[JAVA] 상속과 생성자  (0) 2022.10.12
[JAVA] 상속 extends  (0) 2022.10.11

댓글