使用帮助程序类引用创建的对象

时间:2015-01-29 16:19:20

标签: java class methods

欢乐一月大家,

最近我一直在从头学习Java。这真的很有趣。我已经开始创建一个基本的RPG,用户可以在其中选择和归属,以及用户是想成为战士还是法师。美好时光。

在我的主课程中,我现在有了这个新的英雄对象,它存储了用户输入的所需属性,以及他们是否想要成为战士或法师。现在我想为REFERENCE创建其他类,使用存储的变量创建新对象。我完全迷失了。

由于我不想粘贴一堆令人尴尬的蹩脚代码,我只会使用一个非常简单的例子:

这是第一堂课,用户告诉我们他的英雄有多少力量:

import java.util.Scanner;

public class HeroCreation
{
    int strength;
    Scanner input = new Scanner(System.in);

    public void setStr()
    {
        System.out.println("Please tell stackoverflow how much strength you want: ");
        strength = input.nextInt();
        System.out.println("Your strength is: " + strength + "!");
    }

}

以下是运行此方法的主要类:

public class MainClass
{
    public static void main(String args[])
    {
        HeroCreation hero1 = new HeroCreation();
        hero1.setStr();

        //Here is where I want to reference another class that refers to this new hero...

    }
}

在这里,我被困住了。我有这个新英雄。这个英雄有10个力量。我如何在其他帮助类中引用所述英雄?从概念上讲,我在考虑这个错误吗?

感谢您的时间和专业知识!

3 个答案:

答案 0 :(得分:3)

一种选择是将数据保存在某个地方,无论是在数据库还是文件中。

或者创建要使用的第二个类的实例,然后将hero1传递给相关方法。

通常,当我们讨论辅助类时,我们引用使用静态工厂方法的类,这样就不必初始化它们。

答案 1 :(得分:2)

兄弟,你甚至还没有Hero,你只拥有HeroCreation

为您提供几个面向对象的基本分析和设计概念:

  • 作为一个起始设计规则,您应该为问题空间中的每个名词创建一个类或至少一个变量,并且您应该为问题空间中的每个动词创建一个方法。

  • 在编写新代码时,首先要考虑的是#34;哪个类负责这个"?对正确的类的责任委派对于保持代码易于理解和扩展非常重要。新责任通常不属于任何现有类,因此您必须添加新类。

利用这两个规则,这里是我编写目前代码的起始版本。

<强> Hero.java

public class Hero
{
    private int strength;
    private int intelligence;
    // other attributes

    public int getStrength() {
        return this.strength;
    }

    public void setStrength(int strength) {
        this.strength = strength;
    }

    public int getIntelligence() {
        return this.intelligence;
    }

    public void setIntelligence(int intelligence) {
        this.intelligence = intelligence;
    }

    // other "accessor" (get and set) methods for attributes
}

<强> HeroCreation.java

import java.util.Scanner;

public class HeroCreation
{
    Scanner input = new Scanner(System.in);

    public int askStrength() {
        return askIntegerAttribute("strength");
    }

    public int askIntelligence() {
        return askIntegerAttribute("intelligence");
    }

    // ask other attribute values

    private int askIntegerAttribute(String attribute) {
        System.out.println("How much " + attribute + " do you want? ");
        int value = input.nextInt();
        System.out.println("Your " + attribute + " is: " + value + "!");
        return value;
    }
}

<强> Main.java

public class Main
{
    public static void main(String args[])
    {
        HeroCreation creation = new HeroCreation();

        Hero hero1 = new Hero();
        hero1.setStrength(creation.askStrength());
        hero1.setIntelligence(creation.askIntelligence());

        Hero hero2 = new Hero();
        hero2.setStrength(creation.askStrength());
        hero2.setIntelligence(creation.askIntelligence());

    }
}

现在,您将继续向这些类添加变量和方法,这些变量和方法符合其定义的职责。并且您将继续为您遇到的其他职责创建其他课程。

答案 2 :(得分:0)

根据您的问题和您的意见,我认为您的意思是这样的:

public static class MyHelperClass {

    public static void DoSomethingWithHeroStrength(HeroCreation hero)
    {
        int strength = hero.getStrength();
        // ...
    }
}