2015-01-29 3 views
0

С Днем всех января,Ссылка на созданные объекты со вспомогательными классами

Недавно я изучаю Java с нуля. Это было очень весело. Я начал создавать базовую RPG, в которой пользователь выбирает и атрибуты, и хочет ли пользователь быть воином или магом. Хорошие времена.

В моем основном классе у меня есть этот новый объект-герой, который теперь хранит входы пользователей для своих желаемых атрибутов и хочет ли они быть воином или магом. Теперь я хотел бы создать другие классы для ССЫЛКИ, что вновь созданный объект с сохраненными переменными. Я полностью потерян.

Поскольку я не хочу, чтобы вставить в неловком количестве дерьмового кода, который я буду использовать очень простой пример:

Вот первый класс, в котором пользователь говорит нам, сколько сила его герой:

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 сил. Как я могу ссылаться на упомянутого героя в других вспомогательных классах? Концептуально, я думаю об этом неправильно?

Спасибо за ваше время и знания!

+0

Вы имеете в виду хранить этого героя в коллекции, такой как ArrayList, и ссылаться на нее позже? – PDizzle745

+0

Итак, скажем, я хочу создать вспомогательный класс, который определяет что-то, основанное на силе этого героя. Как мне написать этот метод в этом классе, чтобы обратиться к этому герою? –

+0

@ QPaysTaxes, который является действительно общим и бесполезным. Я думаю, что мы понимаем, что мы начинаем с базового уровня здесь. Ваш комментарий ничего не значит. –

ответ

2

Братан, вы даже не имеют Hero все же, все, что вам это HeroCreation.

Пара основного объектно-ориентированный анализ и проектирование концепций для вас:

  • В качестве исходного правила проектирования, вы должны создать класс, или, по крайней мере, переменный, для каждого существительного в вашем пространстве проблемы , и вы должны создать метод для каждого глагола в своем проблемном пространстве.

  • При написании нового кода первое, что вы должны думать, это «какой класс несет ответственность за это»? Делегирование ответственности за правильный класс очень важно, чтобы ваш код был легко понят и расширен. Часто новая ответственность не относится к какому-либо существующему классу, поэтому вам нужно добавить новый класс.

Используя эти два правила, вот стартовая версия того, как я напишу код, который у вас есть.

Герой.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()); 

    } 
} 

Теперь вы бы продолжать добавлять переменные и методы этих классов, которые вписываются в их определены обязанности. И вы продолжаете создавать другие классы для других обязанностей, с которыми вы сталкиваетесь.

+1

Ничего себе. Это потрясающе. Большое вам спасибо за то, что нашли время, чтобы построить этот ответ. Это так полезно. Я пытаюсь поглотить как можно больше знаний из разных источников, но очевидно, что мне все еще не хватает основных элементарных понятий, подобных тем, которые вы описали. Очень полезно. Огромное спасибо. –

+2

Кроме того, +1 для брокера –

+0

Ha! Пожалуйста :) – gknicker

3

Один из вариантов - сохранить данные где-нибудь, будь то в базе данных или в файле.

Или создайте экземпляр второго класса, который вы хотите использовать, и просто передайте герою1 соответствующему методу.

Часто, когда мы говорим о вспомогательных классах, мы ссылаемся на классы, которые используют статические заводские методы, так что их не нужно инициализировать.

+0

Можете ли вы привести базовый пример того, что вы имеете в виду? Концептуально я понятия не имею, что это повлечет за собой. –

+0

Просьба описать более подробно, что именно вы пытаетесь выполнить. – barq

+0

Я не знаю достаточно, чтобы понять ваш ответ. Я думаю, что ясно, что я немного подумал, может быть, слишком далеко здесь, и мне нужно вернуться к учебнику и сначала понять строительные блоки. Спасибо за ваш ответ. –

0

Основе ваш вопрос и ваши комментарии, я думаю, что вы имеете в виду что-то вроде этого:

public static class MyHelperClass { 

    public static void DoSomethingWithHeroStrength(HeroCreation hero) 
    { 
     int strength = hero.getStrength(); 
     // ... 
    } 
} 
Смежные вопросы