![](/img/trans.png)
[英]How to access a class variable by passing value to object from another variable?
[英]Access object from another class to get its variable
我得到了类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.
}
}
从所有类变量中删除静态 - 改为使用实例变量。 然后为每个提供典型的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中有特殊含义。 这并不意味着变量或方法是可继承的; 它意味着只有一个属于类,而不是实例。
要从超类继承,所需要的只是它不是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
这可以在这里运行。
在卡类中使字段私有而不是公共的,在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所以是的
我希望这有助于:)祝你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.