백엔드/JAVA_이론공부

JAVA_super, super()

반 불혹 2022. 9. 18. 20:59

super, super()

super, super()는 이전에 설명한 this,this()와 맥락이 비슷하다. 

this는 자기 객체를 가리키는 참조 변수명으로, 메서드 내의 맴버변수와 지역변수 이름이 같을때 구분하기 위한 용도로 사용된다. (작성 생략 시 컴파일러가 알아서 만들어줌)

this()는 같은 클래스 내의 다른 생성자를 호출할 때 사용되며, 생성자 내에서만 사용 가는하며, 항상 첫 줄에 위치해야한다.

super, super()도 이와 비슷하다.

 

super

super는 상위 클래스의 객체를 호출한다.

this처럼 객체를 호출하는것과 비슷한 맥락이다. 

코드예시

 

public class Super {
    public static void main(String[] args) {
        Lower l = new Lower();
        l.callNum();
    }
}

class Upper {
    int count = 20; // super.count
}

class Lower extends Upper {
    int count = 15; // this.count

    void callNum() {
        System.out.println("count = " + count);
        System.out.println("this.count = " + this.count);
        System.out.println("super.count = " + super.count);
    }
}

// 출력값
count = 15
count = 15
count = 20

위의 코드에서 Lower 클래스는 Upper클래스를 상속받은 상태이다. 

상속받은 상태에서, count에 15를 넣엇으니, count는 15인 상태

하지만, 출력 시 모두 15로 출력되지 않는다.

callNum()메서드를 보면 마지막 출력에서 super.count를 볼 수 있다.

super키워드로 인해 상위클래스인 Upper클래스의 맴버(변수) count가 호출되었는데, 이 count는 20으로 초기화 되어 있기 때문이다.
->super키워드로 인해 부모클래스(상위클래스)의 객체의 맴버값을 참고 할 수 있다!

 

super()

super()는 상위 클래스의 생성자를 호출한다. 

this()처럼 생성자를 호출하는것과 비슷한 맥락이다.

코드예시

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
    }
}

class Human {
    Human() {
        System.out.println("휴먼 클래스 생성자");
    }
}

class Student extends Human { // Human 클래스로부터 상속
    Student() {    
        super(); // Human 클래스의 생성자 호출
        System.out.println("학생 클래스 생성자");
    }
}

// 출력값
휴먼 클래스 생성자

위의 코드에서 Human클래스에서 생성자 안에 "휴먼 클래스 생성자"를 출력하게 하고, Human 클래스를 상속받는 Student 클래스를 만들어 객체를 생성하는 코드

Student 클래스에서 생성자를 생성 할 때 super();키워드가 상위클래스의 생성자를 가져오기 때문에 Human의 생성자가 호출된다.

고로, "휴먼 클래스 생성자"를 출력하게 하는 Human 생성자가 불려오므로 "휴먼 클래스 생성자"출력이 나오게 되고, 그 뒤로 "학생 클래스 생성자"를 출력으로 내놓게 된다.

 

Object 클래스

Object 클래스는 클래스 상속계층도에서 최상위에 위치한클래스이다. 

JAVA의 모든 클래스는 Object를 상속 받는다.

우리가 Object클래스를 굳이 작성 안해도 되는 것은 컴파일러가 알아서 만들어 주기 때문

사실 Object클래스 안에 메서드가 들어 있어서 우리가 자동으로 상속받아 사용 할 수 있는 것이라고 한다.

메서드 예시

 

Object의 메서드 (출처 : 코드스테이츠)

 

Object클래스 안에는 굉장히 많은 메서드가 있다고 한다.

모두를 다룰 수는 없고, 필요할때 찾아서 하면 된다고 한다.

 

'백엔드 > JAVA_이론공부' 카테고리의 다른 글

JAVA_접근제어자 , getter, setter  (0) 2022.09.18
JAVA_캡슐화, 패키지, import  (0) 2022.09.18
JAVA_메서드 오버라이딩  (0) 2022.09.18
JAVA_상속  (0) 2022.09.18
JAVA_내부 클래스  (0) 2022.09.18