Задать вопрос
@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 просмотра
Подписаться 2 Оценить 12 комментариев
Решения вопроса 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 тебе подскажет).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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