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的引用!