http://stackoverflow.com/questions/285177/how-do-i-call-one-constructor-from-another-in-java
Q: 자바에서, 한 클래스가 여러 생성자를 가지고 있는 경우, 그 중 한 생성자에서 다른 생성자를 호출할 수 있나요? (같은 클래스이고, subclass가 아닙니다) 만약 가능하다면 어떻게 하면 되나요? 그리고 여러 가지 방법이 있다면, 그 중 제일 좋은 방법이 무엇인가요? (그걸 수행하는 방법이 여러 가지가 있나요?)
(질문자: ashokgelal)
A: 네 가능합니다.
public class Foo
{
private int x;
public Foo()
{
this(1);
}
public Foo(int x)
{
this.x = x;
}
}
생성자 자신이 아닌, superclass의 생성자를 호출하고 싶다면 this 대신에 super를 이용하세요.
중요한 것은, 생성자에서 다른 생성자를 호출하는 것은 1회만 가능(그 생성자 내에서 다른 생성자를 연이어 호출하는 것은 가능)하고, 그 호출은 생성자의 첫 줄에서 해야만 합니다.
(답변자: Jon Skeet)
역주: 첫 줄이 아닌 것에서 다른 생성자를 호출하려고 하면 이클립스에서는 에러를 출력합니다.
댓글
[181] this(1); 는 첫 번째 라인에 들어가야 됩니다. – superarts.org Sep 20 '12 at 2:15
[12] 그 말은 super클래스의 생성자와, 같은 클래스 내의 다른 생성자를 동시에 호출할 수는 없다는 뜻인가요? – gsingh2011 Nov 2 '12 at 18:02
[9] @gsingh2011: 바로 그겁니다. (연이어 호출될 수 있는) 생성자는 한 번만 이용할 수있습나다. – Jon Skeet Nov 2 '12 at 18:06
[11] this를 첫 줄에서 수행해야 하는 제약을 극복하기 위해, 생성자에 들어가는 변수로 static function을 넣는 방법을 이용할 수 있습니다. 생성자 수행 전에 계산되어야 하는 내용이 있다면, 이런 식으로 우회할 수 있습니다. – Christian Fries Mar 11 '13 at 20:34
역주: 생성자에서 다른 생성자를 호출 할 때는 첫 줄에서만 호출할 수 있다는게 원칙입니다. 하지만 계속 연계해서 생성할 수 있기 때문에, super를 호출해야 할 때는 연계해서 호출할 수 있습니다. 그리고 변수로 static function을 넣을 수 있으니 미리 계산할 것이 필요하면 계산할 수도 있습니다.
public class Foo {
private int x;
private static int add(int a, int b) {
return a + b;
}
public Foo() {
this(add(3, 4));
}
public Foo(int x) {
this(x + "");
}
public Foo(String a) {
super();
x = Integer.parseInt(a);
}
}
944 124 | Is it possible to call a constructor from another (within the same class, not from a subclass)? If yes how? And what could be the best way to call another constructor (if there are several ways to do it)? | ||||||||
protected by Mysticial Jul 8 '13 at 17:58This question is protected to prevent "thanks!", "me too!", or spam answers by new users. To answer it, you must have earned at least 10 reputation on this site. | |||||||||
| |||||||||
1318 | Yes, it is possible:
To chain to a particular superclass constructor instead of one in the same class, use See also this related question, which is about C# but where the same principles apply. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
'StackOverflow ' 카테고리의 다른 글
[C#] C#의 정확한 버전 정보를 알려주세요 (0) | 2015.12.17 |
---|---|
[Android] 안드로이드에서 투명한 Activity를 만드려면 어떻게 해야 하나요? (0) | 2015.12.15 |
[PHP] PHP에서 stdClass가 무엇인가요? (0) | 2015.12.11 |
[Linux] 전체 시스템에서, 특정 스트링을 포함하는 파일 찾기 (0) | 2015.12.10 |
[HTML] 웹 브라우저에 입력할 수 있는 URL의 길이? (0) | 2015.12.09 |