본문 바로가기

Java

[Java] 생성자, super

반응형
package org.opentutorials.javatutorials;
public class ConstructorTest {
    public static void main(String[] args) {
        ConstructorTest  c = new ConstructorTest();
    }
}

위는 에러가 안난다.

ConstructorTest 객체를 생성할 때 자동으로 생성자를 만들어주기 때문

 

package org.opentutorials.javatutorials.Inheritance;
public class ConstructorTest {
    public ConstructorTest(int param) {} //error
    public static void main(String[] args) {
        ConstructorTest  c = new ConstructorTest();
    }
}

위는 에러가 난다.

매개변수가 있는 생성자가 있을 때는 자동으로 기본 생성자를 만들어주지 않는다. 따라서 위의 예제는 존재하지 않는 생성자를 호출하고 있다

 

package org.opentutorials.javatutorials.Inheritance;
public class ConstructorTest {
    public ConstructorTest(){}
    public ConstructorTest(int param) {}
    public static void main(String[] args) {
        ConstructorTest  c = new ConstructorTest();
    }
}

 

그래서 매개변수가 있을때는 매개변수가 없는 기본 생성자를 추가 해주어야한다.

 

 

Super

package org.opentutorials.javatutorials.Inheritance;
 
class Calculator {
    int left, right;
     
    public Calculator(){}
     
    public Calculator(int left, int right){ //super 의 left, right 값 받아온다
        this.left = left;
        this.right = right;
    }
 
    public void sum() {
        System.out.println(this.left + this.right);
    }
 
    public void avg() {
        System.out.println((this.left + this.right) / 2);
    }
}
class SubstractionableCalculator extends Calculator {
    public SubstractionableCalculator(int left, int right) {
        super(left, right); // 부모클래스 생성자
    }
 
    public void substract() {
        System.out.println(this.left - this.right);
    }
}
 
public class CalculatorConstructorDemo5 {
    public static void main(String[] args) {
        SubstractionableCalculator c1 = new SubstractionableCalculator(10, 20);
        c1.sum();
        c1.avg();
        c1.substract();
    }
}

super 키워드는 부모 클래스를 의미

여기에 ()붙이면 부모 클래스의 생성자를 의미

부모 클래스의 기본 생성자가 없어져도 오류가 발생하지 않는다.

하위 클래스의 생성자에서 super를 사용할 때 주의할 점은 super가 가장 먼저 나타나야 한다는 점이다.

즉 부모가 초기화되기 전에 자식이 초기화되는 일을 방지하기 위한 정책

반응형

'Java' 카테고리의 다른 글

[Java] overloading 오버로딩  (0) 2021.03.11
[Java] overrding 오버라이딩  (0) 2021.03.09
[Java] 생성자  (0) 2021.03.08
[Java] this  (0) 2021.03.07
[Java] 클래스 멤버, 인스턴스 멤버  (0) 2021.03.07