2013-06-13 4 views
2

두 클래스 사이에서 메서드 및 변수를 호출하는 방법을 배웠습니다. 상속을 사용하지 않고 한 클래스에서 다른 클래스로 값을 이동할 수 있는지 알고 싶었습니다. 다음은 그 예입니다.자바에서 상속받지 않고 한 클래스의 변수 값을 다른 클래스로 옮길 수 있습니까?

  1. class1과 class2의 두 클래스를 만듭니다.
  2. class1에 값이있는 변수를 입력합니다.
  3. 변수 값을 class2로 이동하십시오.
  4. 클래스 2의 if 문으로 테스트 할 값을 지정합니다.
  5. 클래스 2의 출력을 클래스 1로 이동하거나 클래스 2의 출력을 사용하여 메소드를 class1 내에서 호출 할 수 있습니다.

이것은 실제 프로그램 아키텍처는 아니지만 제 학습 목적으로 만 사용됩니다. 고맙습니다. 업데이트 : 나는 위의 아이디어를 보여주기 위해 내가 한 일의 일부 코드를 게시하도록 요청 받았다. 여기

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

I [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 glitched 생각합니다. 답변 해주셔서 감사합니다!!! – 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

왜 MainClass에 getNum() 메서드를 넣어야 했습니까? 번호를 출력하기 위해 다른 클래스의 메서드를 호출 할 수 있다고 생각했습니다. – pavelexpertov

+0

나는 그렇지 않았다. 그러나 "외부"세계에서 변수를 숨기고 * 접근 자 *를 노출하는 것이 일반적입니다 (즉, get 및 set 메서드,이 경우 get 메서드) – darijan

+0

감사합니다. 접근자는 무엇인가, 나는 학습 과정에 머물러있어 가능한 한 모든 것을 배우려고 노력하고있다. – pavelexpertov

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

아니요, 내가 재정의하지 않습니다. 티. 너 extends 다른 클래스가있을 때만 오버라이드가 나타난다. 또한 클래스에 속하기 때문에 static 멤버를 재정의 할 수 없습니다. Class를 호출하기 위해 인스턴스를 만들 필요는 없습니다.

는 또한 먼저 액세스 수정에 대해 배울 수있다. 다른 클래스의 멤버에 액세스하는 간단한 규칙은 해당 클래스가 표시되고 해당 멤버가 제한적인 액세스 권한이없는 경우 액세스 할 수 있다는 것입니다.

+0

당신은 일반적으로 점 표기법을 사용해서 다른 종류의 일원에게 접근합니까? – pavelexpertov

+0

'정적'이 아닌 경우 점 표기법을 통해 액세스해야합니다. 여기서 '정적'멤버를 사용하는 이유는 무엇인지 물어야 할 것입니다. 따라서, 항상 임의의 숫자를 반환하는 메소드를 가진 하나의 유틸리티 클래스가 있다고 가정하고 메소드를 수행 한 클래스의 인스턴스에 관계없이 항상 동일한 방식으로 작동하므로 메소드를 정적으로 만들어야합니다. – Parth

+0

오케이 지금은 고마워! – pavelexpertov