繁体   English   中英

从其他类访问数据

[英]Accessing data from other classes

我是初学者所以请非常具体。 无论如何,我在这里有三个代码类,我想从cb然后ba Eg访问数据

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

在你的班级GoobyPls为每个项目添加getter,如下所示:

class GoobyPls {
{
   private int CHealth = 20;

   public int getHealth(){
      return Chealth;
   }
}

然后在viewStats执行此操作:

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

只要你想使用私有变量,就可以调用getter。 或者您也可以将变量定义为public,以便您可以在viewStats中直接调用它们。 但是作为设计观点,吸气剂和制定者更好,因为隐藏信息更好。 除非有充分理由这样做,否则应将字段声明为私有字段。

我强烈建议您阅读有关类和对象Java教程 ,这将为您提供良好的工作基础。

在类之间传递数据的最基本方法是在类中定义其他对象可以调用以获取对数据的访问权限的公共方法。 例如:

public class Person {

    private String firstName; 
    private String lastName;

    public String getFirstName () {
        return firstName;
    }

    public String getLastName () {
        return lastName;
    }

}

名称如getX()返回值的方法称为“getters”。 然后,在另一个类中,您可以访问该数据,例如:

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);
}

您可能还希望提供在对象中设置数据的方法。 这些被称为“setter”,是“getters”的对应物。 建立在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
}

希望有所帮助,祝你好运。 阅读这些教程!

如果要访问类外部的私有变量,则必须使用如下所示的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访问about值。

首先,你不能像你这样的私人领域

 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进行编码它将帮助您自己识别这类问题。

把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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM