JAVA 초보 질문입니다. 결과값이 0인 이유는?
조회수 632회
package Calc;
import java.util.Scanner;
class Calculator{
int a,b;
void setOprands(int a,int b) {
this.a = a;
this.b = b;
}
int sum() {
return this.a+this.b;
}
void plus() {
}
void minus() {
}
void run() {
plus();
minus();
}
}
class plus extends Calculator{
void plus() {
System.out.println("++"+sum());
}
}
class minus extends Calculator{
void minus() {
System.out.println("--"+sum());
}
}
public class CalculatorConstructorDemo4 {
public static void main(String[] args) {
Calculator Calc = new Calculator();
Calculator plus1 = new plus();
Calculator minus1 = new minus();
Scanner a = new Scanner(System.in);
Scanner b = new Scanner(System.in);
//Calc.setOprands(a.nextInt(), b.nextInt());
Calc.setOprands(10, 20);
plus1.plus();
minus1.minus();
}
}
질문은 간단합니다. 위의코드를 돌리면
결과로 나타날 숫자가 0으로 나타나는데,
왜 sum메소드 연산이 안되는 건가요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
calc 객체와 plus1 객체는 서로 다른겁니다.
calc 객체의 setOprands 메소드를 호출하여 필드 a, b 를 대입했기 때문에 calc 객체에 한해 a, b 가 설정된겁니다.
plus1.setOperands(30, 40); plus1.plus(); ++70
위와 같이 해야 합니다.
한발 더 가서 Calculator 는 abstract 클래스가 되어야 하고 plus 와 minus 도 abstract 메소드로 선언해야 합니다. 물론 그럴경우 Calculator 인스턴스는 만들 수 없습니다. 그렇게 되어야하는 이유는 "계산"이라는 작업은 추상적인 것이고 "더하기 빼기"가 구체화이기 때문입니다.
객체지향의 핵심인 다형성을 공부해보세요.
댓글 입력