2010-02-08 8 views
2

최근에 JDK1.6을 사용하여 Java를 배우기 시작했습니다. 바보 같은 질문이라면, 실례합니다.Java의 main에서 클래스의 전용 변수에 액세스 할 수 있습니까?

main()의 객체가 private 변수에 직접 액세스 할 수있는 경우 어떻게 'private'입니까? 출력 제공

public class Account1 
{ 
private int accountNum; 
private String name; 

Account1() { 
    accountNum = 1101; 
    name = "Scott"; 
} 

public void showData() { 
    System.out.println("Account Number: " + accountNum + 
     "\nName: " + name); 
} 

public static void main(String[] args) { 
    Account1 myA1 = new Account1(); 
    myA1.showData(); 
    System.out.println(myA1.accountNum); //Works! What about "Private"?! 
} 
} 

:

Account Number: 1101 
Name: Scott 
1101 

답변

1

주어진 클래스의 "메인"메소드는 그 클래스의 일부이다. 클래스의 일부인 메서드는 해당 클래스의 전용 멤버에 액세스 할 수 있습니다. 그건 나에게 의미가있다. 물론 반드시 사용해야하는 것은 아닙니다.

그것에 대해 생각하는 한 가지 방법은 다른 클래스의 내부 작동에 대한 한 클래스의 지식을 생각하는 것입니다. Person 클래스는 Order 클래스 내에서 어떤 일이 발생하는지 알지 못한다. 단지 public 메소드를 호출합니다. 그러나 Person 내부의 모든 것은 물론 Person의 내부 구조, 심지어 Person의 다른 인스턴스에 대해서도 알 수 있습니다.

5

메인은 Account1 클래스에 있으므로 여전히 동일한 범위에 있습니다.

개인 변수는 동일한 유형에 속하는 모든 코드에서 액세스 할 수 있습니다. 기본 메소드가 별도의 클래스에있는 경우 리플렉션을 사용하지 않고 액세스 할 수 없습니다.

+0

"로컬 변수"라는 용어는 오해의 소지가 있습니다. – finnw

+0

@finnw 좋은 지적. "동일한 범위"로 조정 됨 – developmentalinsanity

+0

두 번째 문장도 오해의 소지가 있습니다. 'main' 메쏘드는'Account1'의 * instance *에 없습니다. 다소 더 정확한 문장은 "... private 변수는 같은 유형으로 정의 된 모든 메소드 (또는 초기화 메소드)에 의해 액세스 될 수 있습니다". –

0

해당 클래스에서만 액세스 할 수 있다는 점에서 비공개입니다. 즉, 해당 클래스의 정적 메서드 (예 : main)와 인스턴스 메서드 (예 : showData)에서 액세스 할 수 있습니다.

클래스의 한 인스턴스도 클래스의 다른 인스턴스의 개인 멤버에 액세스 할 수 있습니다.

별도의 클래스 인 Account2이 있다면 Account1의 입증 멤버에 액세스 할 수 없습니다.

0

main() 함수가 클래스의 멤버이기 때문입니다. 그것은 모든 반원들에게 접근 할 수 있습니다.

실제 코드에서 main 함수는 실제로 나머지 코드를 부트 스트랩하는 "harness"클래스에 있습니다. 이 하네스 클래스는 일반적으로 매우 가볍고 실제 작업을 수행하는 다른 클래스를 인스턴스화합니다.

관련 문제