иерархическое наследование абстрактного класса с конкретным методом дает ошибку "<identifier> ожидаемый" в Java - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь запустить следующий простой код,

public abstract class Shape{
    abstract double area();
    abstract double circumference();

    public void show()
    {
        System.out.println("Area = "+area());
        System.out.println("Circumference = "+circumference());
    }
}

public class Circle extends Shape{
    double r;

    public double area()
    {
        return 3.14*r*r;
    }

    double circumference()
    {
        return 2*3.14*r;
    }


    Circle(double radius)
    {
        r=radius;
    }
}


public class Rectangle extends Shape{
    double x,y;

    double area()
    {
        return x*y;
    }

    double circumference()
    {
        return 2*(x+y);
    }

    Rectangle(double length, double width)
    {
        x = length;
        y = width;
    }
}

public class Geometry
{
    Circle r = new Circle(2.22);
    Rectangle s = new Rectangle(2.33, 3.44);
    r.show();
}

Но я продолжаю получать идентификатор ожидаемой ошибки от компилятора Java. Что я делаю неправильно. Все общедоступно и, похоже, нет синтаксической ошибки. Пожалуйста, помогите.

Ответы [ 3 ]

6 голосов
/ 26 марта 2012

Это проблема:

class Geometry
{
    Circle r = new Circle(2.22);
    Rectangle s = new Rectangle(2.33, 3.44);
    r.show();
}

Ваше последнее утверждение не объявляет переменную - это просто утверждение.Это должно принадлежать блоку инициализатора, конструктору или методу.Например:

public class Geometry {
    public static void showCircle() {
        Circle r = new Circle(2.22);
        Rectangle s = new Rectangle(2.33, 3.44);
        r.show();
    }
}

Обратите внимание, что это не имеет ничего общего с наследованием - этот код создаст ту же проблему:

class Test {
    System.out.println("Oops");
}
4 голосов
/ 26 марта 2012

Ваш звонок на r.show(); не находится в блоке кода. Я подозреваю, что вы намеревались разместить это основной метод

public static void main(String... args) {
    Circle r = new Circle(2.22);
    Rectangle s = new Rectangle(2.33, 3.44);
    r.show();
}
2 голосов
/ 26 марта 2012

Добавьте основной метод:

public class Geometry
{
     public static void main(String[] args) {
         Circle r = new Circle(2.22);
         Rectangle s = new Rectangle(2.33, 3.44);
         r.show();
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...