从另一个类访问对象以获取其变量

时间:2016-02-29 21:42:10

标签: java

我收到了班级QOpenGLWidget的对象wolfOne,我需要在另一个班级中访问其变量Wolf,我该怎么办?

mAlive

//狼群

    Wolf wolfOne;

//卡类

public class Wolf extends Card {

    public Wolf(){
        mCharacter = "Wolf";
    }

    public void savage(Card card) {
        card.mAlive = false;
    }

}

3 个答案:

答案 0 :(得分:1)

从所有类变量中删除静态 - 改为使用实例变量。然后为每个提供典型的getter / setter,允许类的客户端检索或改变值:

public class Wolf extends Card {
    public Wolf(){
         setMCharacter("Wolf");
    }

    public void savage(Card card) {
        card.setMAlive(false);
    }
}


    public class Card {

        //Names
        private String mCharacter;

        //Status
        private boolean mAlive;
        private boolean mDefended;
        private static boolean mOwled;
        private static boolean mLastSavaged;
        private static boolean mLastLynched;

        public String getMCharacter(){}
            return mCharacter;
        }

        public void setMCharacter(String value){
            this.mCharacter = value;
        }

        public boolean getMAlive(){
            return mAlive;
        }

        public void setMAlive(boolean alive){
            this.mAlive = alive
        }

        //....So on and so forth
    }

答案 1 :(得分:1)

static在Java中具有特殊含义。这并不意味着变量或方法是可继承的;它意味着它只有一个属于类,而不是实例。

要从超类继承,所需要的只是它不是private而继承类将获得它。以下示例显示了这种关系。

import java.util.*;
import java.lang.*;
import java.io.*;

class A
{
    public String name;
    public boolean isAlive;
    public A()
    {
        name = "A";
        isAlive = true;
    }
}

class B extends A
{
    public B()
    {
        name = "B";
        isAlive = false;
    }
}

public class Main
{
    public static void main (String[] args)
    {
        A a = new A();
        A b1 = new B();
        B b2 = new B();
        b2.name = "B2";
        b2.isAlive = true;
        System.out.println(a.name);
        System.out.println(a.isAlive);
        System.out.println(b1.name);
        System.out.println(b1.isAlive);
        System.out.println(b2.name);
        System.out.println(b2.isAlive);
    }
}

并提供此输出:

A
true
B
false
B2
true

这可以运行here

答案 2 :(得分:1)

在卡类中,使字段私有不公开,在oo中称为封装或数据隐藏(查找)。然后只需添加一个返回mAlive值的getMAlive方法和一个将设置它的setMAlive方法。现在在你的狼类中设置mAlive你可以使用setMAlive(boolean)。对于外部对象,您需要引用您的狼/卡并调用wolfName.getMAlive()

卡片......

private boolean mAlive;
public boolean getMAlive(){
  return mAlive;
}
public void setMAlive(boolean value){
  mAlive = value;
}

对于狼......

public void savage(){
  setMAlive(false);
}

其他课程要获得mAlive ......

wolfName.getMAlive()

您可以考虑保护您的mAlive(以及卡中的其他字段)。受保护的字段只能通过扩展它们的类来查看,例如狼。所以在狼的野蛮方法中你可以做到......

public void savage(){
  mAlive = false;
}

但是要从其他课程设置mAlive,你仍然需要一个卡片中的setter所以是的

我希望这有帮助:)祝你好运