如何允许对象使用存储在另一个对象中的字段?

时间:2014-10-29 13:15:45

标签: java

假设您创建了一个名为Album的类和一个名为Song的类。您希望Album对象能够使用Song对象中存储的字段(例如,歌曲的文件大小或运行时)。你需要做些什么来实现这一目标?

我已经尝试将Song中的字段更改为public而不是private,但这没有用。说实话,我是OOP的新手,我觉得我忽略了一些非常重要的东西。

3 个答案:

答案 0 :(得分:1)

字段必须是私有的 这就是为什么你可以创建访问器 getter and setters

参见示例:

Adding Setter and Getter Methods

要使托管bean的状态可访问,您需要为该状态添加setter和getter方法。 一旦添加了setter和getter方法,bean就完成了。最终代码如下所示:

public class Printer {


    private String name;


    public void setName(String name) {
       this.name = name;
    }

    public String getName() {
       return name;
    }
}

答案 1 :(得分:0)

三种方式:

  1. 将相关字段设为公开。不推荐,因为它违反了封装
  2. 提供" getter" Song中的方法返回有问题的值。通常的答案,有时也是正确的答案
  3. 在Song中提供一个方法,以返回表示所需信息的String。如果Song应该负责表示的信息的复杂性是有用的。
  4. 一般来说,我更倾向于让物品倾向于自己编织"越多越好。为此,如果有意义的话,我总是会尝试处理拥有它的类中的数据。在这种情况下,Album将歌曲数据组合成一些可呈现的形式是有意义的,因此我建议在歌曲类中使用getter来提供访问权限,例如:

    public int getFileSize(){
      return fileSize;
    }
    
    public String getName(){
      return name;
    }
    

    然后专辑可以把它们放在一起但是它喜欢。

答案 2 :(得分:0)

首先,专辑会包含一系列歌曲。

例如:

public class Album 
{
    private List <Song> songs;

    public Album ()
    {
        songs = new ArrayList <Song>();
    }
}

Song会有getName()getLength()之类的公共方法,允许Album对象访问它们。

例如:

public int totalLength ()
{
    int length = 0;
    for (Song song : songs)
         length += song.getLength();
    return length;
}