반응형
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 |