Java编译器无法识别派生类,即“未找到符号”错误

时间:2014-10-14 17:21:20

标签: java inheritance

当我尝试编译此代码时,我收到“找不到符号”错误。在主要的,我可以创建Ball类型的对象没有问题,但如果我尝试创建类型篮球的对象,编译器抱怨。我是java的新手,请帮帮忙?

class Ball {
    public double radious;
    public String color;

    Ball( double radious, String color ) {
        this.radious = radious;
        this.color = color;
    }

    public double area() {
        return (4 * Math.pow(this.radious, 2) * Math.PI );
    }

    public void display() {
            System.out.println("\nRadious: " + radious );
            System.out.println("Color: " + color );
    }

    class Basketball extends Ball {
        public int noOfStripes;

        Basketball( int n, double r, String c ) {
            super( r, c );
            noOfStripes = n;
        }

        Basketball( double r, String c ) {
            super( r, c );
            noOfStripes = 8; // Default value 
        }

        public void display() {
            super.display();
            System.out.println("Area: " + area() );
            System.out.println("noOfStripes: " + noOfStripes );
        }
    }
}

class Driver {
    public static void main( String[] args ) {
        Ball basket1 = new Ball( 29.5, "Orange" );
        basket1.display();

        Ball basket2 =new Basketball( 29.5, "Black" );
    }
}

3 个答案:

答案 0 :(得分:3)

您创建Basketball不仅是Ball的子类,还是内部类。它不需要是一个内部类。

Basketball类的大括号之外定义Ball

    }
}  // End of Ball class

class Basketball extends Ball
{
   // ...

答案 1 :(得分:0)

您需要使用BasketBall

来限定Ball
Ball.Basketball basket2 = new Ball.Basketball( 29.5, "Black" );

正如其他评论和答案所指出的,您不应该使用内部类进行继承。 BasketBall应该是一个单独的类:

public class BasketBall extends Ball {

}

答案 2 :(得分:0)

由于BasketballBall的内部类,因此您必须按以下方式创建目标:

Ball.Basketball myBasketball = new Ball().new Basketball(/* foo arguments */);

但更好的解决办法是将其移到外面成为一个自己的班级。