![](/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.