如何使用 Java 继承对平方答案进行立方

How to cube a squared answer using Java inheritance

我们编程的方向 activity 是这样的(大致翻译成英文):

说明:编写一个程序来计算用户输入数字的平方和立方。创建classes,显示Java的继承和封装特性。创建您自己的声明。

到目前为止,我已经求出了平方数。这是我的代码:

import java.util.*;

public class Square {

    protected int square;
    
    public int getSquare() {
        return square;
    }

    public void setSquare (int numberToSquare) {
        square = numberToSquare*numberToSquare;
    }  

    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Square number2 = new Square();
        Cube number3 = new Cube();
        
        System.out.println("Enter number to square and cube: ");
        int userNumber = input.nextInt();
        
        number2.setSquare(userNumber);
        number3.setCube(userNumber);
        
        System.out.println("The square of " + userNumber + " is " + number2.getSquare());
        System.out.println("The cube of " + userNumber + " is " + number3.getCube());
    }
    
}

这是我的 Cube class:

class Cube extends Square {
    protected int cube;
    
    public int getCube() {
        return cube;
    }
    
    public void setCube (int numberToCube){
        cube = getSquare()*numberToCube;
    }

}

我知道我的 setCube 是错误的,但这就是我想问的:我是否可以使用平方答案,这样我就可以避免输入 numberToCube x numberToCube x numberToCube?

您可以像下面这样创建您的 类。 (装饰器设计模式)

public interface Operation {
   public int getResult(int input);
}

public class Square implements Operation{

    public int getResult(int input) {
        return input*input;
    }
}

class Cube implements Operation {
    private Operation operation;

    public Cube(Operation operation){
        this.operation = operation;
    }

    public int getResult(int input) {
        return operation.getResult(input) * input;
    }

}

然后在上面调用:

Operation square= new Square();
Cube cube= new Cube(square);
cube.getResult(input);

或者更简单一点:

public class Square {

    // Value is protected, so you can also see it in the Cube class.
    protected int val;

    public Square(int val) {
        this.val = val;
    }

    public int calculate() {
        return val*val;
    }
}

public class Cube extends Square {

    public Cube(int val) {
        super(val);
    }

    @Override
    public int calculate() {
        super.calculate()*val;
    }
}

无论哪种方式,我认为这是对面向对象编程和继承的误解,因为您使用两个 类 进行一些非常基本的计算。这些不是任何对象,它们以应使用 OOP 的方式共享属性。