Getters和Setter只对最后创建的对象起作用

问题描述 投票:0回答:2

我真的是Java的新手,我正在学习一个星期四进行的测试。我正在做一些旧测试,问题是创建一个可以使该类正常工作的类:

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)

     ********/

最后的注释部分显示了结果应该是什么(抱歉,它是葡萄牙语,但这是问题的措辞)。因此,我尝试创建自己的类,这确实是我第一次使用OOP,因此我几乎一无所知,但是我不明白为什么我的吸气剂和吸气剂只会影响最后创建的对象(相册3) 。我的班级写成如下:

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)
java setter getter
2个回答
2
投票

您正在使用静态成员:

private static String Titulo;
private static int temas;
private static int ano;

这意味着,如果您为Album的一个实例更新这些成员中的任何一个,则将全部更新。

尝试一下:

private String Titulo;
private int temas;
private int ano;

并将类底部的那些静态方法更改为此:

   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)" );
    }

0
投票

您需要删除静态修饰符。

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.