Ошибки компиляции

391
25 мая 2017, 08:54

Помогите пожалуйста.Без введения новых полей класса и изменения модификаторов доступа устранить все ошибки компиляции.

class Ball{
        private int radius;
        private final int defaultRadius;
        public Ball(){
            defaultRadius = 20;
            radius = calculateRadius();
        }
        public Ball(boolean isDoubled){
            if (isDoubled)
                radius <<= 1;
        }
        protected int calculateRadius(){
            return defaultRadius;
        }
        public String toString(){
            return radius;
        }
}
class BigBall extends Ball{
    private int radiusInc = 30;
    protected int calculateRadius(){
        return defaultRadius+radiusInc;
    }
}
public class Main{
    public static void main (String[]args){
        System.out.println(new Ball());
        System.out.println(new Ball(true));
        System.out.println(new BigBall());
        System.out.println(new BigBall(true));
    }
}

Error:(17, 16) java: incompatible types required: java.lang.String found: int

Error:(24, 16) java: defaultRadius has private access in Ball

Error:(32, 28) java: constructor BigBall in class BigBall cannot be applied to given types; required: no arguments found: boolean reason: actual and formal argument lists differ in length

Answer 1

incompatible types required: java.lang.String found: int

Говорит о том, что возвращаемый тип метода должен быть String, а он сейчас int

Чтобы привести в нужный вид, нужно возвращать то, что требуют:

public String toString(){
    return String.valueOf(radius);
}

defaultRadius has private access in Ball

Модификатор доступа у defaultRadius объявлен как приватный, а значит достучаться к полю можно через метод calculateRadius(). Вдобавок он объявлен как final, а значит брать значение можно только с базового класса. Это значит, что здесь:

protected int calculateRadius(){
    return defaultRadius+radiusInc;
}

можно записать так:

protected int calculateRadius(){
    return super.calculateRadius()+radiusInc;
}

constructor BigBall in class BigBall cannot be applied to given types; required: no arguments found: boolean reason: actual and formal argument lists differ in length

Говорит о том, что в строке

System.out.println(new BigBall(true));

Дается конструктору параметр, хотя в классе BigBall нет такого конструктора.

лечится добавлением оного:

public BigBall(boolean isDoubled){
    super(isDoubled);
}

Правда тогда пропадает конструктор по умолчанию, который компилятор автоматически всегда создает для классов, а значит для new BigBall() теперь нужно конструктор по умолчанию создать ручками:

public BigBall(){
    super();
}

и еще. Т.к. defaultRadius объявлен как final, то изменять это значение нельзя. А значит значение нужно сразу инициализировать

private final int defaultRadius = 10;

а также нельзя пытаться изменить это значение здесь:

public Ball(){
    defaultRadius = 20; <!---- Это нужно удалить
    radius = calculateRadius();
}

Результат может выглядеть как-то так:

class Ball{
    private int radius;
    private final int defaultRadius = 10;
    public Ball(){    
        radius = calculateRadius();
    }
    public Ball(boolean isDoubled){
        // вызов конструктора по умолчанию,  
        // иначе не будет инициализирован radius
        this();
        if (isDoubled)
            radius <<= 1;
    }
    protected int calculateRadius(){
        return defaultRadius;
    }
    public String toString(){
        return String.valueOf(radius);
    }
}
class BigBall extends Ball{
    private int radiusInc = 30;
    public BigBall(){
        super();
    }
    public BigBall(boolean isDoubled){
        super(isDoubled);
    }
    protected int calculateRadius(){
        return super.calculateRadius()+radiusInc;
    }
}

main без изменений

System.out.println(new Ball());
System.out.println(new Ball(true));
System.out.println(new BigBall());
System.out.println(new BigBall(true));
READ ALSO
Создание двигающихся объектов в Java

Создание двигающихся объектов в Java

Дали задание создать ( нарисовать ) двигающийся объект в JavaКонкретное задание нарисовать фигуру относительно базовой точки ( базовая точка...

276
Не переходит на другое activity

Не переходит на другое activity

Есть активити Activityq и приложение переходит в него из мэинаЯ создавал активити через file -> new -> activity

276
Закрытие jframe через некоторое время netbeans

Закрытие jframe через некоторое время netbeans

Здравствуйте, пожалуйста, подскажите как сделать закрытие формы через некое время (минуту)На одной (1)jframe есть кнопка перехода на следующую...

273
Класс Stack в Java

Класс Stack в Java

Какой класс лучше использовать для использования стека в java и почему он лучше?

333