@NikitkOS

Почему выдает ошибку java в примере иерархии?

Здравствуйте. Занимаюсь по книге Эльдара Хабибуллина "Java 7". Дошел до иерархии и там такой пример (на скрине). Почему выдает ошибку и как ее исправить? Заранее большое спасибо!
06465f5654804913a496069fd8aa1524.png5ea89b19240e4eadb72bfdbe45ea3a7f.pnge5a642c5d393484c8bdc3705d246b231.png
  • Вопрос задан
  • 482 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Всё дело в том, что вы пишете tuzik.age = 3; не в методе, а в объявлении класса. Так делать нельзя. Как вам уже советовали, отформатируйте код, станет понятнее. Сейчас вы сделали следующее:
* объявили класс Pet
* объявили внутри него класс Dog
* внутри Dog объявили две переменные типа Dog - tuzik и sharik
* продолжили работать с этими переменными в теле класса. Тут ошибка, так делать нельзя.
* далее объявили внутри Pet класс Master.

Вообще, логическая ошибка у вас пошла со второго пункта. Dog надо делать отдельным файлом. И Master тоже. Переменные tuzik и sharik внутри Dog быть не должны, надо их отдельно куда-нибудь писать.

Примерно так:
//Pet.java
public class Pet{
...
}

//Dog.java
public class Dog extends Pet{
...
}

//Master.java
public class Master{
...
}

//Main.java
public class Main{
    public static void main(String[] args){
        Dog tuzik = new Dog();
        ...
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@IceJOKER
Web/Android developer
Потому что нужно наоборот написать:
tuzik.age = 3;

Совет- не забывайте про табуляции, уже на начальном уровне пытайтесь писать красивый код, потом вам будет легче и вам самим будет удобно работать с кодом, нежели с тем, что я вижу у вас на скрине
Ответ написан
EugeneP2
@EugeneP2
Java Dev
1. Какие либо операции непосредственно в теле класса, кроме декларации полей, нужно помещать в блок из фигурных скобок.

Dog tuzic = new Dog();
	{
		tuzic.age = 1;
	}


2. Ошибка, у вас произойдет рекурсия и программа вылетит с StackOverflowError
class Dog extends Pet {
	Dog tuzic = new Dog();
}

.....

Dog tuzic = new Dog(); // и понеслась:)


При первом создании объекта класса Dog он уйдет в рекурсию
Ответ написан
Комментировать
Konstantin18ko
@Konstantin18ko
Стоматолог
Запомните сначала ссылка на объект, потом его его переменная.
Есть собака(объект) по кличке Тузик(ссылка на объект), ей три года(переменная класса).
tuzik.age = 3
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы