【问题标题】:Visibility of class variables in parent class父类中类变量的可见性
【发布时间】:2016-03-31 12:07:14
【问题描述】:

我有一个扩展 Entity.java 的 Player.java 类。在实体中,我定义了 x 和 y 坐标。在 Game.java 中,我创建了一个玩家对象:Player player = new Player(0, 0);。 Entity.java 中 x 和 y 变量的可见性应该是多少?我不想直接在 Game.java 中设置它们,但如果我将它们设为私有,我将无法从子类 Player.java 访问它们。我是否应该只在 Entity.java 中创建 getter 和 setter,并且当我需要 Player.java 类中的 x 和 y 时调用这些方法?这意味着每次我需要在 Player.java 中计算 x 和 y 时,我都需要调用 getter 和 setter。

Main.java

Player player = new Player(0,0);

Player.java

public Player(int x, int y) {
    super(x, y);
}

Entity.java

private/public int x;
private/public int y;

public Entity(int x, int y) {
    this.x = x;
    this.y = y;
}

【问题讨论】:

  • 你可以让他们protected

标签: java oop inheritance visibility getter-setter


【解决方案1】:

如果您希望在 Entity 类中承担责任,请将属性设为私有。制作protected getter 和 setter。这样Player 可以间接访问x 和y 属性,而Game 类不能设置访问这些属性,因为protected 的getter 和setter。

【讨论】:

  • 受保护的显示变量对所有子元素且对所有外部元素不可见
  • 也许我对问题的理解有误,但我认为这是在这种情况下想要的行为'我不想能够直接在 Game.java 中设置它们'。
  • 我不确定玩家是否是实体的孩子,游戏是实体的孩子,两者都有还是没有,再读一遍后不清楚:)所以也许我们理解正确
【解决方案2】:

您可以同时设置protected 并使用子类中的super.x ; super.y ; 进行访问。 最好不要使用 setter 和 getter(对象编程)

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 2014-09-20
    • 2015-11-24
    • 2014-04-05
    • 2011-09-29
    • 2013-03-04
    • 2011-07-17
    • 2012-06-12
    • 2016-02-15
    相关资源
    最近更新 更多