2013-08-16 87 views
1

我是一個初學者,所以請非常特別。無論如何,我在這裏有三個代碼類,我想從c-b訪問數據,然後b-a E.g.從其他類訪問數據

class GoobyPls { 
{ 
    private int CHealth = 20; 
    private int MHealth = 20; 
    private int CAgility = 10; 
    private int MAgility = 10; 
    private int CDefence = 5; 
    private int MDefence = 5; 
} 
} 

class Stats { 
public static void foo() { 
    string Health = CHealth + "/" + MHealth ; 
    string Agility = CAgility + "/" + MAgility; 
    string Defence = CDefence + "/" + MDefence; 
} 

} 

class ViewStats { 
public static void foo() { 
System.out.println("Health"); 
       System.out.println(Health); 
       System.out.println(" "); 
       System.out.println("Agility"); 
       System.out.println(Agility); 
       System.out.println(" "); 
       System.out.println("Defence"); 
       System.out.println(Defence); 
       System.out.println(" "); 
    } 
} 

所以GoobyPlsaStatsbViewStatsc

還我不能把它們都放在一個類,因爲終究會有一個修飾類編輯CHealthMHealth

+7

這是[一個很好的開始](http://docs.oracle.com/javase/tutorial/java/javaOO/classes.html) –

+0

此外,堅持[java命名約定](http:// java .about.com/OD/javasyntax /一個/ nameconventions.htm)。 – predi

+0

感謝這看起來不錯 – user2687097

回答

2

訪問約值在你的類GoobyPls添加干將每個項目如下:

無論何時,當你想使用私有變量

GoodyPls gp = new GoobyPls(); 
System.out.println(gp.getHealth()); 

就叫干將:

,然後在viewStats做到這一點。或者你也可以定義public變量,以便你可以直接在viewStats中調用它們。但是,從設計的角度來看,getter和setter更好,因爲隱藏信息更好。 除非不是這樣做的充分理由,否則字段應聲明爲私人。

+2

澄清:非公共領域和隱藏信息的一些原因通常是更好的,包括:a)內部隱藏於外部,因此您可以稍後更改字段和內部實現,而無需更改可能使用您的代碼的其餘部分干將。 b)你有能力編寫getter而不是setter,有效地使數據只讀,這可能是有用的。 c)子類可以覆蓋方法,但不能覆蓋公共字段訪問。仍然有很多情況下公共領域是有意義的。在教授新程序員時要小心「總是更好」的陳述。 –

+0

哈哈,你抓到我了 – anvarik

-1

把getter和setter放到你的班上,或者讓你的班級公開。(我不建議第二班)

class GoobyPls { 

    public int getCHealth() { 
     return CHealth; 
    } 
    public void setCHealth(int cHealth) { 
     CHealth = cHealth; 
    } 
    public int getMHealth() { 
     return MHealth; 
    } 
    public void setMHealth(int mHealth) { 
     MHealth = mHealth; 
    } 
    public int getCAgility() { 
     return CAgility; 
    } 
    public void setCAgility(int cAgility) { 
     CAgility = cAgility; 
    } 
    public int getMAgility() { 
     return MAgility; 
    } 
    public void setMAgility(int mAgility) { 
     MAgility = mAgility; 
    } 
    public int getCDefence() { 
     return CDefence; 
    } 
    public void setCDefence(int cDefence) { 
     CDefence = cDefence; 
    } 
    public int getMDefence() { 
     return MDefence; 
    } 
    public void setMDefence(int mDefence) { 
     MDefence = mDefence; 
    } 
    private int CHealth = 20; 
    private int MHealth = 20; 
    private int CAgility = 10; 
    private int MAgility = 10; 
    private int CDefence = 5; 
    private int MDefence = 5; 
} 

然後你就可以像這樣訪問:

class Stats { 
public static void foo() { 
GoobyPls gbp=new GoobyPls(); 
    string Health = gbp.getCHealth + "/" + MHealth ; 
    string Agility = gbp.getCAgility + "/" + MAgility; 
    string Defence = gbp.getCDefence + "/" + MDefence; 
} 
+0

這些etters和seters去哪裏,你可以編輯我的代碼shw我pleee? – user2687097

+0

@ user2687097我編輯了答案。 –

1

我強烈建議通過Java tutorial on classes and objects,它會給你一個良好的基礎工作從閱讀。

在類之間傳遞數據的最基本方法是定義類中的其他對象可以調用以訪問數據的公共方法。例如:

public class Person { 

    private String firstName; 
    private String lastName; 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

} 

方法與像getX()返回值的名字被稱爲「干將」。然後,在另一個類,您可以訪問數據,例如:

public void elsewhere() { 
    Person p = new Person(); 
    System.out.println(p.getFirstName() + " " + p.getLastName()); 
} 

帶班溝通的另一種方式是寫有參數的方法,例如:

public void printFullName (Person p) { 
    System.out.println(p.getFirstName() + " " + p.getLastName()); 
} 

public void elsewhere() { 
    Person p = new Person(); 
    printFullName(p); 
} 

您可能還需要提供方法設置數據在一個對象中。這些被稱爲「制定者」,是「獲得者」的對應物。從上面建立在Person

public class Person { 

    private String firstName; 
    private String lastName; 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setFirstName (String firstName) { 
     this.firstName = firstName; 
    } 

    public void setLastName (String lastName) { 
     this.lastName = lastName; 
    } 

} 

然後,其他對象可以改變一個人的數據,例如:

public void elsewhere() { 
    Person p = new Person(); 
    p.setFirstName("Bob"); 
    System.out.println(p.getFirstName()); // prints "Bob" 
} 

下面是使用一切從上面的例子:

public void swapPersonFirstAndLastName (Person p) { 
    String temporary = p.getFirstName(); 
    p.setFirstName(p.getLastName()); 
    p.setLastName(temporary); 
} 

public void printFullName (Person p) { 
    System.out.println(p.getFirstName() + " " + p.getLastName()); 
} 

public void example() { 
    Person p = new Person(); 
    p.setFirstName("John"); 
    p.setLastName("Smith"); 
    swapPersonFirstAndLastName(p); 
    printFullName(p); // prints Smith John 
} 

希望幫助還有祝你好運。閱讀這些教程!

0

你不能,你的私人領域希望首先如下

class GoobyPls { 
{ 
    private int CHealth = 20; // you can't use private here 
    private int MHealth = 20; // and care on java naming conventions 
    private int CAgility = 10; 
    private int MAgility = 10; 
    private int CDefence = 5; 
    private int MDefence = 5; 
} 
} 

,它應該是String不串

string Health = CHealth + "/" + MHealth ; // String not string 

使用IDE做編碼它會幫助你識別那些樣由你自己的問題。

+0

澄清:'private'不能被使用的原因是因爲有第二個花括號的內部集合,它實際上標記了一個初始化塊(這是一個不同的主題),'private'不是一個合法的修飾符那裏。他們不得不被提升到課堂上。 –

+0

感謝您查看IDE現在 – user2687097

+0

@JasonC ohh感謝您提供更多信息 –

1

如果你想訪問類之外的私有變量,你必須使用下面的getter方法。

class GoobyPls { 
private int CHealth = 20; 
private int MHealth = 20; 
private int CAgility = 10; 
private int MAgility = 10; 
private int CDefence = 5; 
private int MDefence = 5; 
public int getCHealth() { 
    return CHealth; 
} 
public int getMHealth() { 
    return MHealth; 
} 
public int getCAgility() { 
    return CAgility; 
} 
public int getMAgility() { 
    return MAgility; 
} 
public int getCDefence() { 
    return CDefence; 
} 
public int getMDefence() { 
    return MDefence; 
} 
} 

下面是你的狀態類

class Stats { 
public static void foo() { 
GoobyPls g=new GoobyPls(); 
int Health = g.getCHealth()/g.getMHealth() ; 
int Agility = g.getCAgility()/g.getMAgility(); 
int Defence = g.getCDefence()/g.getMDefence(); 
} 

,並在您viewstat類的foo()方法,你可以通過State.HealthState.AgilityState.Defence