Помогите пожалуйста.Без введения новых полей класса и изменения модификаторов доступа устранить все ошибки компиляции.
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
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));
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Дали задание создать ( нарисовать ) двигающийся объект в JavaКонкретное задание нарисовать фигуру относительно базовой точки ( базовая точка...
Есть активити Activityq и приложение переходит в него из мэинаЯ создавал активити через file -> new -> activity
Здравствуйте, пожалуйста, подскажите как сделать закрытие формы через некое время (минуту)На одной (1)jframe есть кнопка перехода на следующую...
Какой класс лучше использовать для использования стека в java и почему он лучше?