2012-10-17 7 views
-1

내 클래스 B에서는 클래스 A의 메서드를 사용할 수 있기를 원합니다.다른 클래스의 클래스 참조

  1. 수입 A 급
  2. 그것을 초기화 -를 ClassA의 A = 새를 ClassA (NULL, NULL);
  3. 의 I 클래스를하는 방법

    공공 무효 getAMethod() { a.getTestValue를 사용하려면 내 방법에 추가; }

내 질문은 :

  1. 이 그것을 할 수있는 올바른 방법이 있나요?
  2. 클래스 B를 실행할 때마다 클래스 A의 새 인스턴스가 항상 생성됩니까?
  3. 클래스 A가 열려 있고 클래스 B를 실행하는 경우 클래스 B가 클래스 A의 현재 변수 값을 얻지 않습니까? 아니면 새 클래스 A (null, null)로 인해 클래스 A 기본값을 가져 옵니까?

내 문제는 다음과 같습니다

  1. 나는 같은 변수에 2 개 개의 다른 값을 얻고있다.

예 : 클래스 A - 나는 getTestValue을 실행할 때 진정한

initialize = boolean test = false 

클래스 대화 상자가 설정 시험 열립니다

=

는 클래스 A 내에서 방법

public boolean getTestValue() { 
    return test; 
} 

만들기 항상 true입니다. getTestValue가 호출 될 때 클래스 B에서 항상 false를 반환합니다 (클래스 A 대화 상자를 열어도)

클래스 B가 매번 클래스 A의 새 인스턴스를 만드는 것처럼 보입니다. 따라서 클래스 A의 기본값을 볼 수 있습니다. 클래스 B가 클래스 A를 호출 할 때 클래스 A의 현재 값을 가져와야합니다. 하지 기본값

편집 나는 정적으로 클래스 A의 방법을 변경 그리고 내가 가지고 있던 문제를 해결했습니다. 이것은 나에게 큰 도움이되었습니다 - 제안에 감사드립니다! 당신은 새로운 인스턴스를 생성하기 때문에

+0

질문하신 내용이 확실하지 않습니다. 부분은 자체 포함 된 소스 코드 조각을 보여 것이라고하며 가 "{a.getTestValue} 3. 내가 수업을하는 방법 공공 무효 getAMethod()를 사용하고자하는 나의 방법에 추가"경우에 도움이 될 . – TheBlastOne

+0

두 클래스에 대해 더 많은 코드를 게시 할 수 있다고 생각하십니까? – joeschmidt45

+0

이전 두 가지 의견에 동의합니다. 질문을 이해할 수 없습니다. new를 호출하거나 해당 클래스의 메서드를 호출하여 해당 클래스의 인스턴스를 만드는 "클래스를 실행"하면 무엇을 의미합니까? A가 두 번 인스턴스화되는지 보려면 A의 생성자에 println을 추가하십시오. Joshua Bloch의 Bruce Eckel과 Effective Java에 의해 Thinking Java에 대한 책을 제안하고자합니다. – Ivan

답변

2

좋아, 상당히 많은 근거가 있지만 그래도 간략하고 각 질문에 차례대로 대답하려고 노력할 것입니다.

1. 올바른 방법입니까?

일반적으로은 작은 프로그램으로 클래스를 가져올 필요가 있습니다. ClassAClassB이 같은 패키지 안에 있거나 둘 다 할당 된 패키지가 없지만 같은 디렉토리에있는 경우 가져 오기가 필요하지 않습니다.

ClassA 방법을 ClassB 방법으로 래핑하는 한, 아니요, 아니요입니다. 다음을 수행하여 언제든지 ClassA 방법을 ClassB에서 액세스 할 수 있습니다. myMethodInClassA();

ClassA.myMethodInClassA(); 

경우 하지 정적, 당신은 예를 ClassA에 호출 할 필요가 있으므로, 당신이 할 것 (여전히 ClassB가에서); staticnon static 필드에 나에 제공

ClassA myA = new ClassA(); 
myA.myMethodInClassA(); 

. 필드가 initializetest 인 경우 static으로 표시됩니다. 그런 다음

public static boolean initialize = false; 

항상에서 동일한 값이 모든ClassA의 인스턴스 어디서나에 액세스를 할 수있다; 그들은 다음 다시 정적으로 표시하지 않은 경우

if(ClassA.initialize) { 
    //something 
} 

(많은 비 정적 메서드처럼) 당신은 예와 같은 필드를 쿼리와 ClassA이 필요합니다;

ClassA myA = new ClassA(); 
if(myA.initialize) { 
    //something 
} 

그리고이 경우

, 각 예를 ClassAinitialize의 복사본을 가지고, 그래서 initialize의 값이 조회되는 경우에 따라 달라집니다.

2. 클래스 B를 실행할 때마다 항상 클래스 A의 새 인스턴스를 만들고 있습니까?

ClassB의 생성자 안에 ClassA의 생성자를 호출하면 대답은 '예'입니다.

public ClassB() { 
    //constructor for ClassB 
    ClassA c = new ClassA(); 
} 

그런 다음 네, 당신은 당신이 새로운 ClassB 만들려면 새 ClassA 모든 시간을 만들 것입니다.

3. 클래스 A를 열고 클래스 B를 실행하면 클래스 B는 클래스 A의 변수 값을 가져 오지 않습니까? 그렇지 않으면 새 클래스 A (null, null)로 인해 클래스 A가 기본값이됩니까?

java ClassA을 실행 한 다음 java ClassB을 명령 프롬프트에 실행했다면 두 개의 별도 프로그램 인 두 개의 JVM 인스턴스가 병렬로 실행됩니다. 이 두 프로그램은 서로 관련이 없으며 특별히 구현하지 않는 한 방법으로 으로 서로 통신 할 수 없습니다.

'열린'으로 말하면, 예를 들어 new ClassA();과 같이 생성 된 것을 의미하는 경우 클래스 대 인스턴스 멤버에 대해 다시 말합니다.

staticnon-static 필드와 방법에 대한 질문 1에 대한 답변에서이 주제를 다룹니다.

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

TLDR : 전반적으로 나는 다음과 같은 몇 가지 문서를 읽어보실 것을 권합니다 코드 스 니펫으로 u는하지만 같은 질문을 지원하지 않았다으로이 링크를 ^^

0

는 값이 다른 정적으로 변수 시험을

이 그것을 할 수있는 올바른 방법이 있나요?
자세한 사용 사례에 따라 달라집니다.

클래스 B를 실행할 때마다 클래스 A의 새 인스턴스가 항상 생성됩니까?
예, B의 인스턴스를 만들 때마다 A

의 새 인스턴스가 생성됩니다. 클래스 A가 열리고 클래스 B를 실행하면 클래스 B는 클래스 A의 현재 변수 값을 가져 오나요? 새 classA (null, null)로 인해 클래스 A가 기본값이됩니까?
새 인스턴스를 만들므로 기본값을 얻을 수 있습니다.

1

@Jkteater을 읽을 이동 귀하의 질문에 당

Is this the correct way to do it ? 

Ans By의 : 한 내가 클래스 B에서 클래스 A의 객체를 만드는 두 가지 방법을 (를 ClassA의 A = 새를 ClassA()를 통해 다른 클래스에서 클래스 A의 방법을 사용할 수 있습니다 A.getTestValue();) 그리고 두 번째 i 클래스 A를 클래스 B (클래스 B는 클래스 A를 확장)로 확장하여 상속을받습니다.

Is every time I execute class B, is it always creating a new instance of class A? 

Ans By의 : u는 (당신이 클래스 이름 만 통해 사용 A.In 정적 경우 다음 클래스 A의 새로운 인스턴스를 생성하거나 클래스 B에서 클래스 A를 확장하거나 수업 시간에 당신의 방법은 정적 만들 싶지 않는 경우 A.getTestValue();)

If class A is opened and I run class B, does class B get the current 
    values of variables in class A, or does it get the class A defaults 
    because of new classA(null, null) 

Ans By의 :를 ClassA A = 신규) (널, 널를 ClassA 이러한 클래스 (NULL, NULL)는 A 급 못해 비 정적 데이터 멤버를 초기화하는 데 사용되는 생성자 클래스 B의 현재 값이 어떤 차이가 나는지, 값 u가이 생성자를 통과하여 클래스 A의 정적이 아닌 데이터 멤버를 초기화합니다.

아래의 질문에 정확한 답을 줄 수 있도록 정확한 코드를 붙여주세요.

관련 문제