2011-11-04 7 views
1

모든 것이 클래스 인 Java가 작동하는 방식에 혼란스러워하고 있습니다.자바 가변 범위 문제

나는 클래스 foo.java을하고 foo.javamain 방법 나는 foo의 인스턴스를 만들 (클래스 자체를 만들어 내게 아무 의미하지만, 자바 정상 보인다?)

가 그럼 난의 인스턴스를 만들 다른 클래스 bar, 그래서 지금 foobarfoo 클래스 안에 인스턴스가 있지만 어떻게 바의 기능을 가진 foo의 멤버 변수에 액세스합니까?

foo은 처리 코드이며 bar은 ui이며 모든 데이터를 foo에 표시해야 표시 할 수 있습니다. 내가 제안

+1

약간의 샘플 공용 폴더의 코드는 매우 유용 할 것입니다. 지금까지 작성한 내용을 볼 수 있도록 두 가지 수업을 게시 할 수 있습니까? – Mechkov

+0

막대 객체에 foo 객체가있는 것이 더 논리적이지 않습니까? –

답변

3

가능성은 다양합니다. 하나는 bar 인스턴스 foo를 구축하는 것입니다

public class Foo { 
    public void someFooMethod() { 
    } 
    public static void main(String[] args) { 
     Foo foo = new Foo(); 
     Bar bar = new Bar(foo); 
     bar.someBarMethod(); 
    } 
} 

public class Bar { 
    private Foo fooLocalRefence; 
    public Bar(Foo foo) { 
     this.fooLocalReference = foo; 
    } 
    public someBarMethod() { 
     this.fooLocalReference.someFooMethod(); 
    } 
} 
+1

예, 항상 더 좋은 선택입니다. –

0

당신은 오라클 사이트의 자바 튜토리얼을보고 - 당신이 원인이됩니다 이해하지 못하는 코드를 작성 ->http://download.oracle.com/javase/tutorial/java/index.html

다음에 따라이 당신에게 자바 응용 프로그램을 작성하는 방법에 대한 더 나은 이해를 줄 것이다 나중에 개발 과정에서 사용하면 문제가 .....

0

첫째, Foomain 방법은 아마 static이다, 그래서 Foo을 만드는 Foo의 인스턴스가 없습니다.

두 번째로 Foo은 게터 메소드를 통해 데이터를 노출해야하고 Bar은 제공된 인스턴스 Foo에서 게터 메소드를 호출하여 데이터에 액세스해야합니다.

+0

막대는 getter 메서드를 어떻게 호출합니까? 당신은 방금 해결하지 못한 문제를 옮겼습니다 – Skeith

+0

@Skeith "Foo는 getter 메소드를 통해 데이터를 노출해야하고 Bar는 Foo의 제공된 인스턴스에서 데이터에 액세스해야합니다."라고했습니다. getter 메서드는 public이므로 Bar가 호출 할 수 있습니다. 이것은 정확히 Pablo가 게시 한 것입니다 (Foo 메서드가 void를 반환한다는 점을 제외하고). –

1

당신이 잘못했기 때문에 "자기 자신을 만드는 수업은 나에게 이해가되지만 자바에서는 정상적으로 보입니다."라는 문구가 잘못되어 있기 때문에입니다. 실제로 수행하는 작업은 Foo 인스턴스를 만드는 것입니다. 그리고 main()은 응용 프로그램의 시작 지점에 불과합니다. JVM은 어디에서 시작해야하는지 간단히 알기 때문입니다.

두 개의 서로 다른 클래스의 인스턴스가 정보를 공유하게하려면 다른 클래스의 인스턴스 중 하나에 정보를 공유해야합니다. 다음과 같은 내용이 있습니다.

Foo foo = new Foo(); 
Bar bar = new Bar(foo);