83873
サブクラスのprotected int sum()以降をどう書けばいいかわかりません。配列要素の合計を表示出力したいです。

```

    //スーパークラス
    class SuperClass {
         public SuperClass(int[] array) {
            for (int value: array) {
                list.add(value);
            }
        }
        public List<Integer> getList() {
            return list;
    }
    
      protected int[] 〇〇() {
            int[] array = new int[list.size()];
            Object[] values = list.toArray();
            for (int i = 0; i < values.length; i++) {
                array[i] = (Integer)values[i];
            }
            return array;
        }
        public String execute() {
            String value = calculation();
            return "結果：" + value;
        }
     
    }
    
    //サブクラス
    public class SubClass extends SuperClass {
    public SubClass (int[] array) {
            super(array);
        }
        @Override
        protected String calculation() {
            return String.valueOf(this.sum());
        }
    
    　　
    protected int sum() {
    これ以降がわかりません。
    
    
    ＿＿＿
    
    public class Main {
        public static void main(String[] args) {
            int[] num = { 1,2,3,4,5,6 };
            Super myArray = new Subclass(num);
            String result = myArray.execute();
            System.out.println(result);
        }
    }
    
```
CC BY-SA 4.0
2021-11-26T06:37:44.617
83813
2021-11-29T15:41:07.410
2021-11-26T06:43:25.330
26370
49233
question
java
戻り値を格納する方法を教えてください。
質問者が求めているのは、タイトルの「戻り値を格納する方法を教えてください」ではなく「配列要素の合計を表示出力したい」なのですから、それを実現する素直な(クラスの階層を作ったり、メソッドにアクセス制限(Protected等)を付けたりしない）プログラム例が回答になると考えました。

```

    public static void main(String[] args) { // args は使ってません。
        int[] num = { 1,2,3,4,5,6 }; // 合計を求める配列を用意する。
        int sum = 0; // 合計を入れるための変数を初期化( 0 にしておく）
        for (i=0; i <= num.len; i++) {
            sum = sum + num[i]; // 要素の値を合計に加えてゆく
        System.out.println(sum); // 配列要素の合計を表示する
    }
    
```
CC BY-SA 4.0
2021-11-26T08:05:47.120
83816
2021-11-26T08:05:47.120
217
83813
answer
`〇〇` メソッドで数値列が配列で取得できるので、これを [`IntStream`
に変換](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/Arrays.html#stream\(int%5B%5D\))して
[`sum`
メソッド](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/stream/IntStream.html#sum\(\))で総和する

```

        protected int sum() {
            return Arrays.stream(〇〇()).sum();
        }
    
```

と、所望の結果が得られるかと思います。  
コンパイルエラーを補完すると、全体としては次のようになります:

```

    import java.util.ArrayList;
    import java.util.List;
    
    //スーパークラス
    abstract class SuperClass {
        private List<Integer> list = new ArrayList<>();
    
        public SuperClass(int[] array) {
            for (int value : array) {
                list.add(value);
            }
        }
    
        public List<Integer> getList() {
            return list;
        }
    
        protected int[] 〇〇() {
            int[] array = new int[list.size()];
            Object[] values = list.toArray();
            for (int i = 0; i < values.length; i++) {
                array[i] = (Integer) values[i];
            }
            return array;
        }
    
        public String execute() {
            String value = calculation();
            return "結果：" + value;
        }
    
        protected abstract String calculation();
    
    }
    
```

```

    import java.util.Arrays;
    
    //サブクラス
    public class SubClass extends SuperClass {
        public SubClass(int[] array) {
            super(array);
        }
    
        @Override
        protected String calculation() {
            return String.valueOf(this.sum());
        }
    
        protected int sum() {
            return Arrays.stream(〇〇()).sum();
        }
    }
    
```

```

    public class Main {
        public static void main(String[] args) {
            int[] num = { 1,2,3,4,5,6 };
            SuperClass myArray = new SubClass(num);
            String result = myArray.execute();
            System.out.println(result); // "結果：21"
        }
    }
    
```
CC BY-SA 4.0
2021-11-29T15:29:18.320
83873
2021-11-29T15:41:07.410
2021-11-29T15:41:07.410
2808
2808
83813
answer