Это потому, что название переменных и альбом не существует в основной процедуре, поскольку он является статичным, что означает, что он не может получить доступ к элементам уровня экземпляра. Вам понадобится экземпляр класса Зингера, как это:
public static void main(String[] args) {
Singer s = new Singer();
System.out.println("Name of the singer is " + s.name);
System.out.println("Album information stored for " + s.album);
}
Однако, если вы не объявлять членов/название альбома с модификатором общественного доступа, приведенный выше код не будет компилироваться. Я рекомендовал писать геттер для каждого члена (getName(), getAlbum() и т. Д.), Чтобы извлечь выгоду из инкапсуляции. Как это:
class Singer {
private String name;
private String album;
public Singer() {
this.name = "Whitney Houston";
this.album = "Latest Releases";
}
public String getName() {
return this.name;
}
public String getAlbum() {
return this.album;
}
public static void main(String[] args) {
Singer s = new Singer();
System.out.println("Name of the singer is " + s.getName());
System.out.println("Album information stored for " + s.getAlbum());
}
}
Другой альтернативой было бы объявить имя и альбом, как статический, то вы можете ссылаться на них так, как вы изначально предполагалось.
'... + s.name); ... + s.album); ' – khachik
BTW, приведенный выше код будет компилироваться и работать нормально, если имя является приватным, так как' main' принадлежит 'Singer'. – khachik