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 인스턴스는 만들 수 없습니다. 그렇게 되어야하는 이유는 "계산"이라는 작업은 추상적인 것이고 "더하기 빼기"가 구체화이기 때문입니다.

    객체지향의 핵심인 다형성을 공부해보세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)