【问题标题】:Calling a method form one class inside another class. Help me understand the logic从一个类中调用另一个类中的方法。帮助我理解逻辑
【发布时间】:2017-03-24 20:15:03
【问题描述】:

我创建了一个简单的程序,它使用 HashMap 在屏幕上打印值。 这是我不明白的部分。当我在主类中创建一个“Person”对象,并使用 Person 的对象调用方法“addPerson”时,程序会打印Peter 10 points。 但是,当我尝试从另一个类(在我的情况下为“帮助”)调用该方法时,我得到了一个结果 Peter null points。 为什么“addPersonDifferentMethod”不向 HashMap 传递任何参数?有什么方法可以实现类似于我在这里尝试做的事情吗?这意味着从一个类中调用另一个类中的方法?(不使用静态)

主类

public static void main(String[] args) {
    Person name = new Person();
    name.addPerson("Peter",10);
    System.out.println("Peter " + name.getMap().get("Peter") + " points");

    Person name2 = new Person();
    Help help = new Help();
    help.addPersonDifferentMethod();
    System.out.println("Peter " + name2.getMap().get("Peter") + " points");   
}

类人

public class Person {

    private HashMap<String, Integer> map = new HashMap<String, Integer>();

    public void addPerson(String name, int points){
        map.put(name, points); 
    }

    public HashMap<String, Integer> getMap(){
        return this.map;
    }
}

课堂帮助

public class Help {
    Person name2 = new Person();

    public void addPersonDifferentMethod(){
        name2.addPerson("Peter", 10);
    }
}

【问题讨论】:

  • 仅仅因为你在你的主类中调用了Person,在你的Help类中调用了Person都是“name2”,并不意味着它是相同的Person。跨度>
  • 换句话说,Main 中的这个“name2”name2.getMap().get("Peter")Help 中的这个“name2”name2.addPerson("Peter", 10); 不同
  • 因为name和name2是不同的对象。
  • 我认为你还应该阅读更多关于类建模的内容,因为Person name = new Person(); name.addPerson("Peter",10); 看起来真的很可怕......

标签: java class methods hashmap


【解决方案1】:

Help 类的addPersonDifferentMethod 方法作用于与您在main 中定义的对象不同的Person 对象。如果要达到类似的结果,则需要将Person 对象的引用传递给addPersonDifferentMethod 方法,例如将Help 类修改为:

class Help {

    public void addPersonDifferentMethod(Person name2){
        name2.addPerson("Peter", 10);
        name2.addPerson("Martin", 15);
    }
}

然后,使用您创建的 Person 对象从 main 调用方法:

Person name = new Person();
name.addPerson("Peter",10);
System.out.println("Peter " + name.getMap().get("Peter") + " points");

Person name2 = new Person();
Help help = new Help();
help.addPersonDifferentMethod(name2);
System.out.println("Peter " + name2.getMap().get("Peter") + " points"); 

【讨论】:

  • 谢谢,我不知道我也可以传递对象引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
相关资源
最近更新 更多