我收到了班级QOpenGLWidget
的对象wolfOne
,我需要在另一个班级中访问其变量Wolf
,我该怎么办?
mAlive
//狼群
Wolf wolfOne;
//卡类
public class Wolf extends Card {
public Wolf(){
mCharacter = "Wolf";
}
public void savage(Card card) {
card.mAlive = false;
}
}
答案 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所以是的
我希望这有帮助:)祝你好运