2016-11-27 2 views
2

Я делаю проект, основанный на концепциях наследования, и создал супер-конструктор, который имеет две переменные внутри себя (String, int), этот супер-конструктор затем вызывается внутри вспомогательного конструктора, который унаследовал класс супер-конструкторов. Затем я использую два метода для возврата свойств этих переменных внутри конструкторов. Свойство age выводит штраф, но свойство String возвращает null. Вот код:Переменная внутри конструктора возвращает null?

животных супер-класса

abstract public class Animal 
{ 

    int age; 
    String name; 

Animal(String name, int age) 
{ 
    this.age = age; 
    this.name = name; 
} 


Animal() 
{ 
    this("newborn", 0); 
} 


public String getName() { 
     return name; 
    } 

    public void setName(String newName) { 
     name = newName; 
    } 

} 

Wolf подклассу

public class Wolf extends Carnivore 
{ 

    String name; 
    int age; 

Wolf(String name, int age) 
{ 
    this.name = name; 
    this.age = age; 
} 

Wolf() 
{ 
    super(); 
} 

    public String getName() 
    { 
     return name; 
    } 

    public int getAge() 
    { 
     return age; 
    } 

} 

Основной метод класса

public class Main { 


    public static void main(String[] args) 
    { 

    Wolf newWolf = new Wolf(); 
    System.out.println("Name = " + newWolf.getName()); 
    System.out.println("Age = " + newWolf.getAge()); 

} 
} 

Возраст возвращается как 0, который является правильным, но System.out.println("Name = " + newWolf.getName());, кажется, возвращает null вместо «новорожденного». Любая помощь в решении этой проблемы приветствуется.

Обновление - Мне нужен метод getName() для другого конструктора, который я не включил в этот пример, так есть ли способ, чтобы они оба существовали?

+1

Удалить GetName() 'метод' из 'Wolf'. это возвращает значение' Wolf .name', который вы никогда не устанавливаете. Удалите 'Wolf.name' тоже. (То же самое касается' getAge() 'и' age' в 'Wolf'). –

+0

Вы обмануты,' age' не возвращает 0 вы думаете, что он возвращается. Он возвращается на престол t 'int', которое оказывается равным 0. Это не тот, который вы указали в конструкторе« Animal ». – Tunaki

+0

Проблема в том, что у меня есть другой конструктор, для которого требуется метод getName(). – Tom

ответ

2

Проблема в том, что вы определяете свои поля в подклассе, вам не нужно, поскольку они унаследованы от родителя.

Ваш класс имеет два набора полей: один из супер (это те, которые заданы вашим конструктором, который вызывает super(), а другой - из дочернего класса (это те, которые возвращаются вашими геттерами, которые не являются инициализируется. нуль по умолчанию INT, а не устанавливать либо).

Так просто удалить определение полей из дочернего класса

Смежные вопросы