super() 는 상속받은 부모 클래스의 변수명이나 클래스 변수를 참조하고, super() 는 부모 클래스 생성자를 호출합니다.


super 변수 

super 는 부모 클래스 인스턴스 변수를 참조할 때 사용합니다.

// ex.1)
class A{
    public int a = 10;
    public int b = 20;
    A(){
        System.out.println("A class 기본생성자");
    }
    A(int a){
        this.a = a;
        System.out.println("A class int a 생성자");
    }
}
class B extends A{
    public int a = 50;
    public int b = 60;
    B(){
        System.out.println("B class 기본 생성자");
         
        // A 클래스의 a 변수를 얻습니다.
        System.out.println("super.a = " + super.a);
        // A 클래스의 b 변수를 얻습니다.
        System.out.println("super.b = " + super.b);
 
        System.out.println("this.a = " + this.a);
        System.out.println("this.b = " + this.b);
    }
}
 
public class Ex01 {
    public static void main(String[] args) {
        new B();
    }
}


아래는 결과 화면입니다.


// ex.2)
class A{
    public int a = 10;
    public int b = 20;
    A(){
        System.out.println("A class 기본생성자");
    }
    A(int a){
        this.a = a;
        System.out.println("A class int a 생성자");
    }
}
class B extends A{
    public int a = 50;
    public int b = 60;
    B(){
        // super() 객체 생성자를 이용해 부모 클래스의 A(int a) 를 호출합니다.
        super(5);
        System.out.println("B class 기본 생성자");
 
        // A 클래스의 a 변수를 얻습니다.
        System.out.println("super.a = " + super.a);
        // A 클래스의 b 변수를 얻습니다.
        System.out.println("super.b = " + super.b);
 
        System.out.println("this.a = " + this.a);
        System.out.println("this.b = " + this.b);
    }
}
 
public class Ex01 {
    public static void main(String[] args) {
        new B();
    }
}

 

아래는 결과 화면입니다.

 

super 변수로 함수를 호출할 수 있습니다. 

// ex.3)
class A{
    public void doA() {
        System.out.println("A 클래스의 doA() 입니다.");
    }
}
class B extends A{
    B(){
        // A 클래스의 doA() 함수를 호출합니다.
        super.doA();
    }
}
 
public class Ex01 {
    public static void main(String[] args) {
        new B();
        // 결과 : A 클래스의 doA() 입니다.
    }
}



super() 객체 생성자

super() 는 부모 클래스 생성자를 호출합니다. 

// ex.4)
class AAA{
    AAA(){
        System.out.println("AAA 생성자");
    }
    AAA(int a){
        System.out.println(a);
    }
}
class BBB extends AAA{
    BBB(){
        super();
        System.out.println("BBB 생성자");
    }
    BBB(int a){
        super(a);
        System.out.println("a = " + a);
    }
}
public class Ex01 {
    public static void main(String[] args) {
        // BBB 클래스의 BBB(int a) 를 호출하면
        // 부모 클래스 AAA 클래스의 AAA(int a) 를 호출합니다.
 
        /* 결과:
         * 20
         * a = 20
         *  
         */
        new BBB(20);
    }
}


1 댓글

  1. ex02 번 문제
    출력이
    A class int a 생성자
    B class 기본 생성자
    super.a = 5
    super.b = 20
    this.a = 50
    this.b = 60
    이렇게 나옵니다.

    답글삭제