

Java初心者です。クラス継承の問題でわからない問題があります。ご教授ください

> 問題文：  
>
> Comicクラスを継承したShortComicクラスを作りましょう。ShortComicは，1巻しか出てないコミック本を表します。ShortComicクラスには以下の実装を行います。
>
>   * 文字列型のシリーズ名のみを受け取るコンストラクタを持つ
>   * 継承元のコンストラクタの巻数には1を指定する
>

>
>
> ShortComicクラスはbookパッケージに定義するものとし（ShortComic.javaは適切なディレクトリにあります），パッケージ外からアクセスできなければなりません

書いたプログラム：

[code]

    import book.Comic;
    public  class ShortComic extends Comic {
    
    public void Comic(String series) {
        super();
        this.volume = 1;
        }
    }
    
[/code]

エラー内容：

[code]

    error: constructor Comic in class Comic cannot be applied to given types;
    public  class ShortComic extends Comic {
            ^
      required: String,int
      found: no arguments
      reason: actual and formal argument lists differ in length
    
    book/ShortComic.java:24: error: call to super must be first statement in constructor
            super();
                 ^
    
    book/ShortComic.java:25: error: volume has private access in Comic
        this.volume = 1;
            ^
    3 errors
    
[/code]

このようなエラーが出てきているのですがさっぱりわかりません。間違っているところがあったら教えてください。


CC BY-SA 4.0
2022-03-28T07:24:05.627
88067
2022-03-28T20:24:42.387
2022-03-28T07:32:38.213
3060
51992
question
java
Java のクラス継承で分からない箇所がある


> error: constructor Comic in class Comic cannot be applied to given types;  
>  error: call to super must be first statement in constructor

これは、`ShortComic` クラスに適切なコンストラクタがないことで起きてます。

> `public void Comic(String series) {`

`public ShortComic(String series) {` でしょう。

* * *

> error: volume has private access in Comic

問題文には`volume`フィールドに代入しろとは書いてないですよね。

> 継承元のコンストラクタの巻数には1を指定する

コンストラクタに`1`を渡すのでしょう。


CC BY-SA 4.0
2022-03-28T07:42:28.393
88069
2022-03-28T07:42:28.393
3475
88067
answer


`Comic` クラスは次のような形なのかと思われます:

[code]

    package book;
    
    public class Comic {
    
        private final String series;
        private final int volume;
    
        public Comic(String series, int volume) {
            this.series = series;
            this.volume = volume;
        }
    
        // ...
    }
    
[/code]

この場合、課題を満たす `ShortComic` の実装は次のようになります:

[code]

    package book;
    
    public class ShortComic extends Comic {
    
        public ShortComic(String series) {
            super(series, 1);
        }
    }
    
[/code]

  * コンストラクタの名前はクラス名と同じです(今回の場合は`ShortComic`)。
  * `super(...);` というのは親クラスのコンストラクタ(ここでは`public Comic(String series, int volume){...}`)呼び出しです。なので、引数に何を渡すかは親コンストラクタに合わせる必要があります。 
    * つまり、今回の場合、第1引数にシリーズ名、第2引数に巻数を設定することになります。


CC BY-SA 4.0
2022-03-28T20:24:42.387
88079
2022-03-28T20:24:42.387
2808
88067
answer