Getters 和 Setters 仅适用于最后创建的对象
Getters and Setters only work on last object created
我真的是 java 的新手,我正在学习周四的考试。我正在做一些旧测试,问题是创建一个 Class 来使这个 Class 工作:
public class TestaAlbum {
public static void main(String[] args) {
Album album1 = new Album("Endless River", 18, 2014);
Album album2 = new Album("The Wall", 26);
Album album3 = new Album("Om", 11, 2015);
//Album album4 = new Album("Heroes", 10, 1977);
album2.setAno(1979); // o album 2 foi originalmente publicado em 1979
if (album2.foiEditadoNesteSeculo())
System.out.println("O album " + album2.getTitulo() +
" foi editado neste seculo, em " + album2.getAno() + ".");
else
System.out.println("O album " + album2.getTitulo()
+ " foi editado no seculo passado, em " + album2.getAno() + ".");
System.out.println("O album " + album3.getTitulo() + " tem " + album3.getTemas() + " temas.");
album3.adicionaTemasBonus(2); // o album 3 tem mais 2 temas extra/bonus...
album1.mostraAlbum();
album3.mostraAlbum();
}
/******** Resultado esperado ao executar o programa de teste acima:
O album The Wall foi editado no seculo passado, em 1979.
O album Om tem 11 temas.
Endless River (editado em 2014; tem 18 temas)
Om (editado em 2015; tem 13 temas)
********/
末尾的评论部分显示了结果应该是什么(抱歉,它是葡萄牙语,但这就是问题的措辞方式)。所以我尝试创建自己的 class,这真的是我第一次使用 OOP,所以我几乎一无所知,但我不明白为什么我的 getter 和 setter 只影响最后创建的对象(专辑 3)。我的Class是这样写的:
public class Album {
private static String Titulo;
private static int temas;
private static int ano;
public Album(String Titulo2, int temas2, int ano2) {
Titulo = Titulo2;
temas = temas2;
ano = ano2;
}
public Album(String Titulo2, int temas2) {
Titulo = Titulo2;
temas = temas2;
}
public String getTitulo() {
return this.Titulo;
}
public int getAno() {
return this.ano;
}
public int getTemas() {
return this.temas;
}
public void setAno(int newAno) {
this.ano = newAno;
}
public static boolean foiEditadoNesteSeculo () {
return Album.ano > 2000;
}
public static void adicionaTemasBonus(int x) {
temas += x;
}
public static void mostraAlbum() {
System.out.println(Album.Titulo + " (editado em " + Album.ano + "; tem " + Album.temas + " temas)" );
}
}
我得到的结果是这样的:
O album Om foi editado no seculo passado, em 1979.
O album Om tem 11 temas.
Om (editado em 1979; tem 13 temas)
Om (editado em 1979; tem 13 temas)
您需要删除静态修饰符。
public class Album {
private String Titulo;
private int temas;
private int ano;
public Album(String Titulo2, int temas2, int ano2) {
this.Titulo = Titulo2;
this.temas = temas2;
this.ano = ano2;
}
您正在使用静态成员:
private static String Titulo;
private static int temas;
private static int ano;
这意味着如果您为 Album
的一个实例更新这些成员中的任何一个,则所有成员都将更新。
试试这个:
private String Titulo;
private int temas;
private int ano;
并将 class 底部的那些静态方法更改为:
public boolean foiEditadoNesteSeculo () {
return this.ano > 2000;
}
public void adicionaTemasBonus(int x) {
this.temas += x;
}
public void mostraAlbum() {
System.out.println(this.Titulo + " (editado em " + this.ano + "; tem " + this.temas + " temas)" );
}
我真的是 java 的新手,我正在学习周四的考试。我正在做一些旧测试,问题是创建一个 Class 来使这个 Class 工作:
public class TestaAlbum {
public static void main(String[] args) {
Album album1 = new Album("Endless River", 18, 2014);
Album album2 = new Album("The Wall", 26);
Album album3 = new Album("Om", 11, 2015);
//Album album4 = new Album("Heroes", 10, 1977);
album2.setAno(1979); // o album 2 foi originalmente publicado em 1979
if (album2.foiEditadoNesteSeculo())
System.out.println("O album " + album2.getTitulo() +
" foi editado neste seculo, em " + album2.getAno() + ".");
else
System.out.println("O album " + album2.getTitulo()
+ " foi editado no seculo passado, em " + album2.getAno() + ".");
System.out.println("O album " + album3.getTitulo() + " tem " + album3.getTemas() + " temas.");
album3.adicionaTemasBonus(2); // o album 3 tem mais 2 temas extra/bonus...
album1.mostraAlbum();
album3.mostraAlbum();
}
/******** Resultado esperado ao executar o programa de teste acima:
O album The Wall foi editado no seculo passado, em 1979.
O album Om tem 11 temas.
Endless River (editado em 2014; tem 18 temas)
Om (editado em 2015; tem 13 temas)
********/
末尾的评论部分显示了结果应该是什么(抱歉,它是葡萄牙语,但这就是问题的措辞方式)。所以我尝试创建自己的 class,这真的是我第一次使用 OOP,所以我几乎一无所知,但我不明白为什么我的 getter 和 setter 只影响最后创建的对象(专辑 3)。我的Class是这样写的:
public class Album {
private static String Titulo;
private static int temas;
private static int ano;
public Album(String Titulo2, int temas2, int ano2) {
Titulo = Titulo2;
temas = temas2;
ano = ano2;
}
public Album(String Titulo2, int temas2) {
Titulo = Titulo2;
temas = temas2;
}
public String getTitulo() {
return this.Titulo;
}
public int getAno() {
return this.ano;
}
public int getTemas() {
return this.temas;
}
public void setAno(int newAno) {
this.ano = newAno;
}
public static boolean foiEditadoNesteSeculo () {
return Album.ano > 2000;
}
public static void adicionaTemasBonus(int x) {
temas += x;
}
public static void mostraAlbum() {
System.out.println(Album.Titulo + " (editado em " + Album.ano + "; tem " + Album.temas + " temas)" );
}
}
我得到的结果是这样的:
O album Om foi editado no seculo passado, em 1979.
O album Om tem 11 temas.
Om (editado em 1979; tem 13 temas)
Om (editado em 1979; tem 13 temas)
您需要删除静态修饰符。
public class Album {
private String Titulo;
private int temas;
private int ano;
public Album(String Titulo2, int temas2, int ano2) {
this.Titulo = Titulo2;
this.temas = temas2;
this.ano = ano2;
}
您正在使用静态成员:
private static String Titulo;
private static int temas;
private static int ano;
这意味着如果您为 Album
的一个实例更新这些成员中的任何一个,则所有成员都将更新。
试试这个:
private String Titulo;
private int temas;
private int ano;
并将 class 底部的那些静态方法更改为:
public boolean foiEditadoNesteSeculo () {
return this.ano > 2000;
}
public void adicionaTemasBonus(int x) {
this.temas += x;
}
public void mostraAlbum() {
System.out.println(this.Titulo + " (editado em " + this.ano + "; tem " + this.temas + " temas)" );
}