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

Java 从另一个类访问对象以获取其变量,java,Java,我得到了类Wolf的对象wolfOne,我需要在另一个类中访问它的变量mAlive,我如何才能不使用它 Wolf wolfOne; //狼类 public class Wolf extends Card { public Wolf(){ mCharacter = "Wolf"; } public void savage(Card card) { card.mAlive = false; } } public cla

我得到了类
Wolf
的对象
wolfOne
,我需要在另一个类中访问它的变量
mAlive
,我如何才能不使用它

    Wolf wolfOne;
//狼类

public class Wolf extends Card {

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

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

}
public class Card {

    //Names
    public String mCharacter;

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


    //Constructor
    public Card() {
        // Do Card specific stuff.
    }
}
//卡类

public class Wolf extends Card {

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

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

}
public class Card {

    //Names
    public String mCharacter;

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


    //Constructor
    public Card() {
        // Do Card specific stuff.
    }
}

从所有类变量中删除静态变量-改为使用实例变量。然后为每个类提供典型的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
    }

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

要从一个超类继承,只需它不是私有的,继承类就会得到它。下面的示例显示了这种关系

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

这可以运行。

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

对于卡片

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

public void savage(){
  setMAlive(false);
}
为了让其他类得到恶意

wolfName.getMAlive()
你可以考虑让你的MARIVE(和卡中的其他字段)受到保护。受保护字段只能由扩展它们的类(例如wolf)看到。所以用沃尔夫的野蛮方法你可以

public void savage(){
  mAlive = false;
}
但若要设置其他类的恶意,你们仍然需要在卡中设置一个setter,所以是的


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

首先,不要让你所有的布尔值都是静态的,因为那样的话,它们就不属于某个对象了。其次,如果它们是公共的,您可以像这样访问它
wolfOne.mAlive
。我不能这样做,这就是为什么:/n然后您不能通过实例访问它们。您可以按类访问它们:
Wolf.mAlive
。在另一个类中,它无法识别wolfOne@FET那么你绝对不能让
mAlive
是静态的,否则整个程序中只有一个
mAlive
值。如果不同的狼群可以有不同的生存状态,那么
mAlive
就不能是静态的。我同意你的观点,变量应该有访问器/变异器方法。这是更好的设计和更可扩展的未来发展。谢谢你,我会让你知道明天,因为现在有一个美好的一天!事实上,我有一个名为wolfOne的Wolf对象(
wolfOne=new Wolf()
),但在另一个类中(我在android中的活动),我无法获得对该wolfOne的引用!谢谢你,明天我会给你反馈的。祝你今天过得愉快!事实上,我有一个名为wolfOne的Wolf对象(
wolfOne=new Wolf()
),但在另一个类中(我在android中的活动),我无法获得对该wolfOne的引用!然后,您需要在android应用程序中的上下文之间传递信息。如果不直接访问实例化类,您将需要在所有android类之间共享或存储在捆绑包中的某个中间类。您是否有公共repo,我们可以查看您的代码?(Android因其在活动生命周期内的几个执行入口而臭名昭著。)太棒了!我只是想知道,顺便说一句,我已经把它修好了:用这个来访问它:RandomAssignment.medium.getMAlive()它是这样工作的:)事实是我有一个名为wolfOne(
wolfOne=newWolf()
)的wolfOne对象,但在另一个类(我在android中的活动)中,我找不到那个wolfOne的引用!