반응형
package org.opentutorials.javatutorials.Inheritance.example3;
class Calculator {
int left, right;
// "여기"
// 기본생성자를 명시적으로 선언해줘야 한다.
// public Calculator(){}
public Calculator(int left, int right){
this.left = left;
this.right = right;
}
public void setOprands(int left, int 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) {
this.left = left;
this.right = 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();
}
}
package org.opentutorials.javatutorials.Inheritance.example3;
class Calculator {
int left, right;
// "여기"
// 기본생성자를 명시적으로 선언해줘야 한다.
// public Calculator(){}
public Calculator(int left, int right){
this.left = left;
this.right = right;
}
public void setOprands(int left, int 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) {
// this.left = left; 사실 상위클래스와 같은 코드를 쓰고 있어 중복이다.
// this.right = right;
// 위와 같은 중복을 방지하기 위해 super() 생성자를 사용한다.
// 상위클래스의 생성자를 의미하는 super()를 사용하므로써
// 상위 생성자를 가져올 수 있고, 이는 하위클래스의 파라미터로 바로 사용된다.
// 초기화 코드를 super보다 먼저 호출하면 안된다.
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();
}
}
반응형
'Programming > Java' 카테고리의 다른 글
ArrayList<datatype> al = new ArrayList<datatype>(); (0) | 2022.01.30 |
---|---|
overriding의 조건 (0) | 2022.01.29 |
extends 상속 (0) | 2022.01.29 |
자바 생성자 (0) | 2022.01.29 |
유효범위 전역변수 지역변수 (0) | 2022.01.29 |