具体方法的抽象类的层次继承在Java </identifier>中给出了“<identifier> expected”错误

时间:2012-03-26 18:42:37

标签: java inheritance

我正在尝试运行以下简单代码,

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 个答案:

答案 0 :(得分:6)

这是问题所在:

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");
}

答案 1 :(得分:4)

您对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 :(得分:2)

添加主要方法:

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();
     }
 }