为什么我的java扩展无法工作?

为什么我的java扩展无法工作?,java,extends,Java,Extends,我有一个超级级的球和延长卵形球。下面是我的代码,我收到一条错误消息,告诉我不能使用子类OvalBall。谁能帮我解释一下吗 public class Ball { private double diameter; private String colour; public Ball(double d, String c) { this.diameter = d; this.colour

我有一个超级级的球和延长卵形球。下面是我的代码,我收到一条错误消息,告诉我不能使用子类OvalBall。谁能帮我解释一下吗

public class Ball                                       
{
  private double diameter;
  private String colour;

  public Ball(double d, String c)
  {
    this.diameter = d;
    this.colour = c;
  }

  public void setDiameter(double d)
  {
    this.diameter = d;
  }

  public double getDiameter()
  {
    return this.diameter;
  }

  public void setColour(String c)
  {
    this.colour = c;
  }

  public String getColour()
  {
    return colour;
  }

  public double bounce()
  {
    double height = diameter * 2;
    return height;
  }

  public void roll()
  {
    System.out.println("wheeee");
  }


  public class OvalBall extends Ball
  {
    private double secondDiameter;



    public void setSecondDiameter(double sd)
    {
      this.secondDiameter = sd;

    }

    public double getSecondDiameter()
    {
      return this.secondDiameter;

    }
  }

} 

public class Main                                       
{
  public static void main(String[] args)
  {
   OvalBall na = new OvalBall(4,"blue",4);
    na.setSDiameter(10);
    System.out.println(na.bounce());
  }
}
请随意更改任何内容


谢谢

您需要将
OvalBall
定义为
static
或在它自己的文件中。

可能OvalBall没有实现hi基类的构造函数类 这就是为什么不能创建卵形球的对象

class Ball {//This is you base class contructor

//Child class contructor
public class OvalBall extends Ball
{
   public OvalBall(double d, String c)
  {
   base(d,c);
  }
}
当您在java中创建嵌套类时,有一个不同的方法。创建对象实例而不是像C#这样的其他语言的方法。 这样试试看


OvalBall是一个内部类(或嵌套类,不管Java的术语是什么)?不确定我是否看对了。如果是这样的话,那就把球打过头去吧-_-始终显示准确的错误消息,并具体说明从何处获取错误消息。就目前情况而言,我认为您的代码不会编译-因此您的语句“我收到一条错误消息,告诉我无法使用子类OvalBall。”令人困惑-请参阅上面的@JonSkeet comment-非常具体地说明错误消息,您在何时何地看到它(编译时或运行时)不,我们不必这样做(即使在这种情况下有意义)。另一个选项是添加适当的构造函数,并从外部类Ball实例创建内部OvalBall类的实例。您不会声明
OvalBall
静态,因为OP明确表示他们想要实例化它。您可能是对的,其目的是以传统方式进行扩展,并将
OvalBall
放在一个单独的文件中,但我们没有足够的信息来了解这一点@Pshemo是正确的-让内部类扩展外部类是合法的,我们可以在添加了正确的构造函数的情况下使用它,并在外部类的实例上操作(
Ball
public class Main                                       
{
  public static void main(String[] args)
  {
   Ball.OvalBall na = na.new OvalBall(4,"blue",4);
    na.setSDiameter(10);
    System.out.println(na.bounce());
  }
}