2013-07-31 1 views
0

У меня есть следующий код«не может ссылаться на Employee.DEFAULT_GENDER перед тем супертипом конструктор был назван» Ошибкой

public class Employee { 

private String name; 
private String gender; 
private int age; 

final String DEFAULT_GENDER = "male"; 
final int DEFAULT_AGE = 18; 

public Employee(String name,String gender,int age) { 
    this.name = name; 
    this.gender = gender; 
    this.age = age; 
} 

public Employee(String name) { 
    this(name,DEFAULT_GENDER,DEFAULT_AGE); 
} 

} 

Я получаю следующее сообщение об ошибке

Cannot reference Employee.DEFAULT_GENDER before supertype constructor has been called 

Я не понимаю, почему это говоря Employee.DEFAULT_GENDER? Я не определил его как статичный! и почему это не позволяет мне вызвать конструктор с 3 параметрами? Я определил DEFAULT_GENDER и DEFAULT_AGE, чтобы обеспечить некоторые значения по умолчанию. Все, что вам нужно для создания объекта Employee, - это его имя (пол и возраст в этом случае имеют значение по умолчанию. Также не разрешен конструктор по умолчанию). Любые мнения о том, почему это происходит?

ответ

1

DEFAULT_GENDER - это переменная экземпляра класса Employee, ее нельзя использовать, пока не будет создан экземпляр класса. Пока конструктор не выполнит полностью, экземпляр не полностью сконструирован, поэтому вы получите такую ​​ошибку.

Сделать оба значения по умолчанию static.

final static String DEFAULT_GENDER = "male"; 
final static int DEFAULT_AGE = 18; 

Отборочные переменные, как static делает их связан с классом Employee и, следовательно, она может существовать, не создавая экземпляр класса Employee.

+0

бы делает его статичным решить эту проблему? статические переменные инициализируются при загрузке класса. –

+0

@AniketThakur этот ответ правильный, сделайте их статичными, они принадлежат классу скорее к объекту +1 – nachokk

+0

Большое спасибо. что работало, но только из любопытства, есть ли работа, если мне нужны значения по умолчанию на уровне объекта, а не на уровне класса? –

0

Вы можете сделать его статическим, если вы хотите, чтобы иметь возможность получить его в любом месте, но используется первый ответ сделать новый экземпляр как лучший дизайн

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