2013-06-13 5 views
2

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

  1. Создаю два класса: class1 и class2.
  2. Я ввожу переменную со значением в class1.
  3. Переместить значение переменной в класс2.
  4. Пусть значение проверяется операторами if в классе2.
  5. Вывод в классе 2 можно перенести в класс1 или метод с выходом в классе2, который можно вызвать в классе1.

Это не настоящая программная архитектура, хотя это только для моих целей обучения. Спасибо. Обновление: Мне было предложено опубликовать код того, что я сделал, чтобы показать эту идею выше. Вот один класс:

class MainClass 
{ 
public static void main(String[] args) 
{ 
    System.out.println("You have entered: " + args[0]); 
    static int num = Integer.parseInt(args[0]); 
    SubClass.calc(); //I believe I override it by passing value to a method within SubClass 
} 

} 

Вот второй класс:

class SubClass 
{ 
    public static void calc() 
{ 
    System.out.println("This is the output" + MainClass.num); 
} 
} 

Я попытался пошевелить значение в аргументах [0] от MainClass подкласса, но я получаю сообщение об ошибке при попытке для передачи его из строки в тип int:

[email protected]:~/myjava$ javac MainClass.java 
MainClass.java:9: error: cannot find symbol 
static int num = Integer.parseInt(args[0]); 
           ^
symbol: variable args 
location: class MainClass 
1 error 

Есть ли что-нибудь, что я могу сделать для решения проблемы?

+3

Pavel, вам необходимо опубликовать код, чтобы показать нам, что вы пробовали. И вам нужно отправить его в stackoverflow, а не здесь. –

+0

Привет @pavelexpertov, я не знаю, чего вы пытаетесь достичь, но этот путь не похож на хороший. Попробуйте реорганизовать свой код так, чтобы он мог обмениваться переданными параметрами. – Joqus

+0

У меня есть несколько ответов ниже. Если вы не видите, я думаю, что мой пост переместился в stackoverflow. И по какой-то странной причине я вижу свой пост на сайте программиста, а также файл stackoverflow. – pavelexpertov

ответ

0

Использования статической можно архивировать, что:

public class class1 
{ 
public static string myname = "light"; 


} 

public class2 { 

public static void displayMyname() 
{ 
    System.out.println(class1.myname); 
} 

    } 

Notic, что метод, который отображает значение должно быть статичным, а также.

+0

Я разместил этот вопрос и почему он говорит, что Misters As user ??? – Ligth

+0

Я видел то же самое. Я думаю, что stackoverflow просто сбил lolz. Спасибо за ответ!!! – pavelexpertov

2

Вы не можете delcare статической переменной внутри метода:

Попробуйте изменить ваш главный класс, как это:

public class MainClass { 

    private static int num; 

    public static void main(String ... args) { 
     System.out.println("You have entered: " + args[0]); 
     num = Integer.parseInt(args[0]); 
     SubClass.calc(); 

     //even better, pass in the argument 
     SubClass.calc2(num); 
    } 

    public static int getNum() { 
     return num; 
    } 

} 

И ваш SubClass так:

public class SubClass { 
    public static void calc() { 
     System.out.println("This is the output" + MainClass.getNum()); //invoke the public getter method. We hid the original num variable with private keyword 
    } 

    public static void calc2(int number) { 
     System.out.println(number); 
    } 
} 
+0

Почему вам нужно было поместить метод getNum() в MainClass? Я думал, что вы можете вызвать метод в другом классе для вывода числа. – pavelexpertov

+0

Я этого не делал. Но обычно скрывать переменные из «внешнего» мира и открывать * accessors * (т. Е. Get и set methods, в этом случае метод get) – darijan

+0

Хорошо спасибо. Тем не менее, у меня есть аксессоры, я просто участвую в процессе обучения, поэтому я стараюсь узнать все, что могу. – pavelexpertov

1
SubClass.calc(); //I believe I override it by passing value to a method within SubClass 

Нет, вы не переопределяете i т. Только когда вы нажмете extends другой класс, то переопределите его. Также помните, что вы не можете переопределить static членов, потому что они принадлежат классу. Вам не нужно вызывать экземпляр класса для их вызова.

А также вы должны сначала узнать о модификаторов доступа. Простое правило доступа к члену другого класса состоит в том, что если этот класс виден и если его члены не имеют ограничительного доступа, вы можете получить к ним доступ.

+0

Обычно вы получаете доступ к членам другого класса с помощью точечной нотации? – pavelexpertov

+0

Если они не являются «статическими», мы должны получить к ним доступ через точечную нотацию. Здесь вам, возможно, придется спросить, в чем причина использования членов 'static'? Итак, предположим, что у вас есть один класс утилиты с методом, который всегда возвращается, скажем, случайным числом, тогда вы должны сделать этот метод статическим, потому что он всегда будет вести себя одинаково независимо от того, какой экземпляр класса выполнил метод. – Parth

+0

ОК я понимаю теперь спасибо !! – pavelexpertov

 Смежные вопросы

  • Нет связанных вопросов^_^