2016-08-10 3 views
1

세 가지 패키지로, 다음과 같은 세 가지 자바 클래스를 생각해Java : 알 수없는 유형의 객체에서 메소드가 작동하는 방식은 무엇입니까?

User.java

package user; 

public class User { 

    String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    public String toString() { 
     return "User [name=" + name + "]"; 
    } 
} 

UserFactory.java

package factory; 

import user.User; 

public class UserFactory { 

    private static User user; 

    public static User getUser() { 
     if (user == null) { 
      user = new User(); 
     } 
     return user; 
    } 

} 

에게

Test.java를
package test; 

import factory.UserFactory; 

public class Test { 
    public static void main(String[] args) { 
     UserFactory.getUser().setName("StackOverflow"); 
     System.out.println(UserFactory.getUser()); 
    } 
} 

주된 방법은 test.Test에 속하며 user.User 클래스를 임포트하지 않습니다. 그러나 user.User 유형에서 작동 할 수 있습니다.

이 동작을 정당화하는 방법은 무엇입니까?

+0

이 답변은 Dhananjay

+0

쪽지 ; 귀하의 질문에 관련이 없습니다 : A) 귀하의 공장은 아마도 "잘못"입니다; ** 하나의 정적 ** 사용자 객체를 가질 필요가 없습니다. 대부분의 프로그래머는 ** factory ** 클래스를 호출 할 때마다 매번 새로운 사용자를 부여한다고 가정합니다. – GhostCat

+0

@Dhananjay - 링크를 제공해 주셔서 감사합니다. 비슷한 질문을 검색했지만 찾지 못했습니다. –

답변

3

import 문의 목적은 이름을 완전하게 지정하지 않고 유형 (또는 import static하는 방법 등,)를 사용 할 수 있도록하는 것입니다. 유형을 사용할 수있는 것은 아닙니다. 단지 짧은 이름으로 사용할 수 있습니다. 그 유형은 getUser()를 호출하는 코드에 이름 일 필요는 없습니다 ...이 경우

UserFactory 유형이 수입되고, 컴파일러는 UserFactory.getUser()에 의해 반환되는 정확한 유형을 알고있다.

User u = UserFactory.getUser(); 

을 다음 가져 오기를해야 할 것 ... 아니면 그냥 그것을 완전히 자격을 수 : 당신이 필요하지 않는

user.User u = UserFactory.getUser(); 

을하지만 쓰고 싶다 경우

소스 코드 내에서 짧은 이름으로 유형을 참조하면 import 문이 필요하지 않습니다.

관련 문제