@NikitkOS

Не поможете разобраться с наследованием в Java?

Недавно уже задавал по этой теме вопрос, но не до конца разобрался. Написал код, ошибок нет, также, как и должного результата. Нужно, чтобы выводило возраст Тузика (т.е. 5), но выводит 0. Объясните, пожалуйста.
public class Pet {
	  public static Dog tuzik = new Dog();
	    String name;
	      int age, weight, cost;
 }
  public class Dog extends Pet{
	  public void Tuzik(){
        tuzik.age = 5;
    }
 }
  public class Main extends Dog{
	  public static void main(String[]args){
	 	 System.out.print(tuzik.age);
    }
 }
  • Вопрос задан
  • 433 просмотра
Решения вопроса 1
pi314
@pi314
Президент Солнечной системы и окрестностей
В том, что вы написали, нет никакого смысла (даже если это и компилируется)! Если я правильно понял смысл затеи, что из написанного ОЧЕНЬ непросто, то должно быть как-то так:
public abstract class Pet {
	String name;
	int age;
	int weight;
	int cost;
}
...
public class Dog extends Pet {
	public Dog(String name, int age){
		this.name = name;
		this.age = age;
	}
}
...
public class Main {

	public static void main(String[] args) {
		Pet tuzik = new Dog("Tuzik", 5);
		System.out.print(tuzik.age);
	}

}

Это наиболее близко к написанному и будет работать, как хочется, но это все еще УЖАСНО с т.з. ООП, так что рассматривайте это только как иллюстрацию, а не как пример к подражанию.

Обратите внимание на "public Dog(String name, int age){..." - это конструктор. У него нет типа. Он вызывается, когда класс инстанциируют (... = new Dog("Tuzik", 5);) и возвращает экземпляр класса (объект). Только после этого поля объекта проинициализированны какими-то значениями. До того в них в данном примере ничего нет (точнее, там сразу после создания объекта и до отработки его конструктора везде 0 и null в name).
Если что-то непонятно, спрашивайте, но учтите, что пока вы не разберетесь с этим, продолжать обсуждать подробности (например, почему класс Pet абстрактный) бессмысленно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Konstantin18ko
@Konstantin18ko
Стоматолог
Вызывай класс.метод, класс.переменная.
Класс Dog, метод Tuzik().
Чтоб было проще. Сначала вызваешь то, что имеет в строке слово class, а дальше то что хочешь увидеть (если что, то IDE тебе подскажет).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
25 апр. 2024, в 19:42
49000 руб./за проект
25 апр. 2024, в 19:41
2000 руб./за проект
25 апр. 2024, в 19:22
18000 руб./за проект