기본 생성자 유형은 무엇입니까? public/private/astract 등Java 클래스 생성자 문제
java의 생성자 유형을 변경할 수 있습니까?
개인용으로 생성자를 생성 할 때 클래스에 액세스 할 수없는 이유는 무엇입니까?
기본 생성자 유형은 무엇입니까? public/private/astract 등Java 클래스 생성자 문제
java의 생성자 유형을 변경할 수 있습니까?
개인용으로 생성자를 생성 할 때 클래스에 액세스 할 수없는 이유는 무엇입니까?
단일 생성자가 있고 private 인 경우 아무도 클래스의 개체를 만들 수 없다는 의미입니다. 그러나 클래스의 객체를 가져 오는 방법은 singletone을 사용하는 것입니다.
public class Foo {
private static Foo foo;
private Foo() { }
public static Foo getInstance() {
if (foo == null) {
foo = new Foo();
}
return foo;
}
}
첫 번째 문장이 정확하지 않습니다. ** 하나 ** 생성자가 있고 private 인 경우 외부 클래스는 클래스의 객체를 만들 수 없습니다. 그러나 클래스에는 여러 생성자가있을 수 있습니다.이 중 하나는 비공개이고 다른 하나는 호출자입니다. – ajb
ajb 내 게시물을 업데이트했습니다. –
예 Java에서 생성자의 유형을 변경할 수 있습니다. 기본적으로 생성자는 public이 아닙니다. 기본 액세스 한정자가있는 클래스의 경우 생성자 액세스도 기본값입니다. 내부 클래스의 경우 클래스에 액세스 수정자를 사용할 수 있으므로 생성자를 정의하지 않는 한 생성자도 동일한 액세스 한정자를 갖습니다. 다른 액세스 한정자를 사용하는 경우
싱글 톤의 경우 개인이 사용됩니다. 이 경우 클래스 외부에서 클래스를 인스턴스화 할 수 없습니다. 예를 들어, 생성자의 기본 유형은 무엇 당신이 뭔가를 할 수있는 개인 생성자를 들어
하는 것처럼라고 싱글
public class Foo {
private Foo foo;
private Foo(){} // default you may not see it in the editor but is provided by complier
public static Foo getInstance(){
if(foo==null)
foo=new Foo();
return foo;
}
}
기본적으로 생성자는 public이 아닙니다. 기본 액세스 수정자를 사용하는 클래스의 경우 생성자 액세스도 기본값입니다. 내부 클래스의 경우 클래스는 모든 액세스 수정자를 가질 수 있으므로 생성자를 정의하지 않는 한 생성자도 동일한 액세스 한정자를 갖습니다. 다른 액세스 한정자를 사용합니다 –
공공/사설/초록 등? 의 경우 default constructor
클래스의 액세스 가능성에 따라 달라지며 클래스가 public
으로 선언 된 경우 기본 생성자가 public이됩니다. 클래스가 protected로 선언 된 경우 기본 생성자가 보호됩니다.
개인용으로 생성자를 생성 할 때 클래스에 액세스 할 수없는 이유는 무엇입니까? 생성자가 클래스 외부에서 표시되지 않기 때문에.
그러나 매개 변수화 된 생성자를 만들면 클래스 외부에서 해당 생성자를 호출합니다. –
@Altmish 생성자를 만들 때 적용 할 액세스 수정 자 (public/private/etc)의 유형이 달라질 것입니다. – sol4me
다음과 같은 방법으로 생성자를 정의 할 수 있습니다
public A()
을 - 즉 다른 모든 클래스는 A
인스턴스를 만들 수 있다는 것을 의미한다.protected A()
- 보호 된 액세스는 A
인스턴스 또는 하위 클래스를 통해서만 액세스 할 수 있다는 것을 의미합니다. 단, 해당 하위 클래스에는 상위 항목의 구현이 관련된 경우에만 액세스 할 수 있습니다. See this post.private A()
- 즉, A
자체가 및 중첩 클래스 또는 캡슐화 클래스 이외의 클래스는 생성자를 호출 할 수 없습니다. 그것은 종종 싱글 톤을 만드는 데 사용됩니다. 정적 방법으로 개체가 생성된다
public class A {
private static A instance;
// Make constructor private
private A() { }
public static A getInstance() {
// Create an instance if it is not yet created.
if (A.instance == null) {
A.instance = new A();
}
return A.instance;
}
}
A()
- (공개 또는 개인 등) 액세스 개질제가 생략되는 경우, 그것이라고 패키지 개인. 패키지 전용 생성자는 동일한 패키지의 클래스 또는 해당 클래스의 하위 클래스에서만 액세스 할 수 있습니다.
There is a table 당신은 유용한 찾을 수 있습니다 : 어떤 수정는 당신이이 생략되고, 수정자를 선언하지 않는 것을 의미
|Class | Package | Subclass | World
public | Y | Y | Y | Y
protected | Y | Y | Y | N
no modifier | Y | Y | N | N
private | Y | N | N | N
주 있다.
이것은 실제로 사실이 아닙니다. 'A' 클래스가 다른 클래스'B'에 중첩되면 B는 모든 A 클래스의 생성자가 private이더라도 A 클래스의 인스턴스를 생성 할 수 있습니다. [여기에서보십시오] (http : // ideone.com/eJqYIn) –
@ IngoBürk 맞습니다. 알았어 고마워. 답변을 업데이트했습니다. –
당신은 어떤 접근 수정 자와 생성자 작성하는 경우 :
public class MyClass {
MyClass (int param) {
// constructor code
}
}
다음 접근성이
패키지 개인, 아니 액세스 한정자 어떤 방법의 접근성과 동일합니다. (JLS 6.6.1 : "액세스 수정 자없이 선언 된 클래스 멤버 또는 생성자는 암시 적으로 패키지 액세스 권한을 갖습니다.") 이것이 생성자의 기본 "유형"(실제로 기본 액세스 가능성)입니다. 이 예에서 package-private 생성자는 동일한 패키지의 클래스에서 new MyClass(10)
을 사용할 수 있지만 패키지 외부에서는 사용할 수 없다는 것을 의미합니다. 다른 접근 방식과 마찬가지로 public
, private
또는 protected
과 같은 접근성 수정자를 추가 할 수 있습니다. 그러나 JLS 8.8.3에 따라 abstract
과 같은 다른 수정자는 사용할 수 없습니다. 당신이 그것을 private
한 경우
후 생성자는 클래스 외부에서 사용할 수 없습니다 (또는, 중첩 클래스, 그것을 포함하는 최상위 클래스 외부),하지만 클래스 내부 을 사용할 수 있습니다. 이 클래스는 정말 생성자가 아닌 정적 팩토리 메소드를 정의 할 수 있음을 의미하지만 클래스의 개체를 구성하는 데 사용됩니다, 비슷한 관용구도 싱글 톤 클래스에 의해 사용되는
public class MyClass {
private MyClass(int param) { ... }
public static MyClass CreateObject(String something) {
// stuff
return new MyClass(n);
}
}
을하는 방법에 팩토리 메소드처럼 클래스의 인스턴스를 리턴하지만 단 하나의 인스턴스 만 작성되도록합니다.
개인 생성자
가 다른 생성자에 의해 사용할 수 있습니다public class MyClass {
private MyClass(boolean isString, String stringParam, int intParam) {
// stuff
}
public MyClass(String stringParam) {
this(true, stringParam, -1);
}
public MyClass(int intParam) {
this(false, null, intParam);
}
}
당신이 private
생성자를 선언하고 수업 시간에 어디를 사용하지 않는 경우에, 그것은 종종 그의 유일한 클래스를 정의하는 데 사용되는 관용구이다 목적은 정적 유틸리티 메소드를 제공하는 것입니다. 정적 메서드를 호출 할 수는 있지만 클래스의 인스턴스를 만들 수는 없습니다.
또한 다음과 같습니다. 중첩 클래스 인 경우 해당 클래스 외부에서 전용 생성자 *를 사용할 수 있습니다. [이 봐] (http://ideone.com/eJqYIn) –
@ IngoBürk 그 사건을 잊어 버린 ... 편집했습니다. – ajb
"개인"이란 무엇을 의미한다고 생각하십니까? –
private은 클래스에 대한 액세스 수정자를 의미합니다. –