77720
Javaのプログラムで質問です。

以下に、長方形の面積と円の面積を半径を表示するプログラム「Shape.java」「Circle.java」「Rectangle.java」「ShapeTester.java」の4つを示します。

Shape.java

```

    public interface Shape {
        /** 図形を表示する　*/
        void print();
    
        /** 面積を返す */
        double getArea();
    }
    
```

Circle.java

```

    public class Circle implements Shape {
        /** 円周率 */
        public static final double PI = 3.14;
        
        private double r;
    
        public Circle(double r) {
            this.r = r;
        }
    
        /** 図形を表示する　*/
        public void print() {
            System.out.println("半径 " + r + "の円です．");
        }
    
        /** 面積を返す */
        public double getArea() {
            return PI * r * r;
        }
    
        /** 円周を返す */
        public double getLength() {
            return 2 * PI * r;
        }
    }
    
```

Rectangle.java

```

    public class Rectangle implements Shape {
        private double a, b;
    
        public Rectangle(double a, double b) {
            this.a = a;
            this.b = b;
        }
    
        /** 図形を表示する　*/
        public void print() {
            System.out.println(a + " x " + b + "の長方形です．");
        }
    
        /** 面積を返す */
        public double getArea() {
            return a * b;
        }
    }
    
```

ShapeTester.java

```

    public class ShapeTester {
        public static void info(Shape s) {
            s.print();
            System.out.println("面積 = " + s.getArea());
        }
    
        public static void main(String args[]) {
            Shape s1 = new Rectangle(2.5, 4.0);
            info(s1);
    
            Circle c = new Circle(1.0);
            info(c);
            System.out.println("cの円周 = " + c.getLength());
    
            Shape s2 = c;
            info(s2);
            System.out.println("s2の円周 = " + s2.getLength());
        }
    }
    
```

しかし、このままコンパイルするとエラーメッセージが以下のように出てきてしまうので

```

    ~/java$ javac Shape.java
    ~/java$ javac Rectangle.java
    ~/java$ javac Circle.java
    ~/java$ javac ShapeTester.java
    ShapeTester.java:17: エラー: シンボルを見つけられません
            System.out.println("s2の円周 = " + s2.getLength());
                                              ^
      シンボル:   メソッド getLength()
      場所: タイプShapeの変数 s2
    エラー1個
    
```

一応、`System.out.println("s2の円周 = " + s2.getLength());` を削除したら、きちんとコンパイルが通りました。  
しかし、なぜ `System.out.println("s2の円周 = " + s2.getLength());`
が必要ないのかが、エラーメッセージを読んでもよくわからなかったので、教えていただきたい次第です。
CC BY-SA 4.0
2021-06-22T01:09:10.760
77690
2021-06-23T02:07:57.943
2021-06-22T01:56:06.267
3060
46879
question
java
エラーになる意味がよくわからない
そのエラーメッセージは、getLengthがない、といっています  
Shapeにはそういうメソッドがないですよね
CC BY-SA 4.0
2021-06-23T02:07:57.943
77720
2021-06-23T02:07:57.943
27481
77690
answer