2015-03-04 2 views
-3

Я hava Супер класс Ball с расширителем OvalBall. Со следующим моим кодом я получаю сообщение об ошибке, сообщающее мне, что не могу использовать дочерний класс OvalBall. может кто поможет объяснить, пожалуйста?Почему мой java EXTENDS не работает?

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

Не стесняйтесь что-либо менять.

Благодаря

+1

Является ли OvalBall внутренним классом (или вложенным классом, какова терминология Java)? Не уверен, правильно ли я это вижу. Если это так, тогда Ball.OverBall, но это ... -_- –

+6

Всегда указывайте * точное сообщение об ошибке и укажите, где вы его получите. –

+1

Как бы то ни было, я не думаю, что ваш код будет скомпилирован - поэтому ваше утверждение «Я получаю сообщение об ошибке, сообщающее мне, что не могу использовать дочерний класс OvalBall». запутанно - см. комментарий @JonSkeet выше - будьте очень конкретны в сообщении об ошибке, где и * когда * вы видите его (время компиляции или время выполнения) –

ответ

0

Вам нужно определить OvalBall либо как static или в отдельном файле.

+1

Нет, нам не нужно (даже если это имеет смысл в Это дело). Другой вариант - добавить правильный конструктор и создать экземпляр внутреннего класса OvalBall из экземпляра внешнего класса Ball. – Pshemo

+0

Вы не объявляете статическую функцию «OvalBall», поскольку OP явно указывает, что они хотят создать экземпляр. Возможно, вы правы, что намерение состоит в том, чтобы распространяться обычным способом и иметь «OvalBall» в отдельном файле, но у нас недостаточно информации, чтобы это знать. @Pshemo прав - законно иметь внутренний класс, расширяемый внешним, и мы могли бы использовать его с добавленным и работающим над экземпляром внешнего класса конструктором ('Ball') –

-1

Возможно, OvalBall реализует класс конструктора базового класса hi Вот почему вы не можете создать объект OvalBall.

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#. Попробуйте это. or use my code as example

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()); 
    } 
} 
Смежные вопросы