有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从其他类访问数据

我是初学者,所以请非常具体。无论如何,我这里有三个代码类,我想从c-b然后b-a访问数据,例如

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

所以{}是{},{}是{},{}是{}

另外,我不能把它全部放在一个类中,因为最终会有一个修改器类来编辑CHealthMHealth等等


共 (5) 个答案

  1. # 1 楼答案

    首先,你不能像下面这样谈论你的私人领域

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

  2. # 2 楼答案

    在类中GoobyPls为每个项添加getter,如下所示:

    class GoobyPls {
    {
       private int CHealth = 20;
    
       public int getHealth(){
          return Chealth;
       }
    }
    

    然后在viewStats中执行以下操作:

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

    只要在需要使用私有变量时调用getter即可。或者您也可以定义公共变量,以便直接在viewStats中调用它们。但是从设计的角度来看,getter和setter更好,因为隐藏信息更好。 字段应声明为私有,除非有充分理由这样做

  3. # 3 楼答案

    我强烈建议您通读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()的方法称为“getter”。然后,在另一个类中,您可以访问该数据,例如:

    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”,与“getter”相对应。在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
    }
    

    希望对你有帮助,祝你好运。阅读那些教程

  4. # 4 楼答案

    在你的班上放上“能手”和“二传手”。或者将字段公开。(我不建议第二个)

    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;
    }
    
  5. # 5 楼答案

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