当我尝试编译此代码时,我收到“找不到符号”错误。在主要的,我可以创建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" );
}
}
答案 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)
由于Basketball
是Ball
的内部类,因此您必须按以下方式创建目标:
Ball.Basketball myBasketball = new Ball().new Basketball(/* foo arguments */);
但更好的解决办法是将其移到外面成为一个自己的班级。