질문 1 : 생성자 호출을 통해 objDummy를 만들려고 할 때 세미콜론이없는 이유는 무엇입니까? 이
, 그것은 당신이 당신이 anonymous class (new A(null, null, null) {
로 시작 비트가 당신이이 질문을 참조 };
까지)가이 어떤 질문 2에서
에 대해 요구하고있는 하나입니다. 즉, 클래스를 생성하고, 생성자를 호출 한 다음 결과 인스턴스를 반환하는 것은 objDummy
입니다.
어떻게 init()을 추가로 호출 할 수 있습니까?
init
는 는이 익명 클래스에 정의되고있어,이 호출되지 않습니다. 구문은 처음에는 조금 혼란 스럽지만 일단 클래스를 정의한다는 것을 알게되면 명확 해집니다. 대략이과 같이 재 작성 될 수 있었다
:
가 다시 말하지만, 그건
public abstract class A {
private static final A createDummy() {
if (objDummy == null) {
objDummy = new ASubclass(null, null, null);
}
return objDummy;
}
private static class ASubclass extends A {
final void init(String a, String b, Object[][] cArray) {
}
public final boolean isSend() {
return false;
}
}
}
하지 (그리고 컴파일,하지만 정확히 같은 원래의 코드와도; 누락 된 생성자가 있는데, 누락 된 선언은 objDummy
입니다.)하지만 잘하면 분명히 알 수 있습니다. 자세한 내용은 링크를 참조하십시오.다음은 생성자에서 추측 버전 있도록이다 것이다 컴파일 :
public abstract class A {
private static final A createDummy() {
// what is the meaning of the following syntax? Qn. 1
if (objDummy == null) {
objDummy = new B (null, null, null); //constructor ends
}//if ends
return objDummy;
} // function createDummy ends
}//class ends
public class B extends A{
final void init(String a, String b, Object[][] cArray) {
}
public final boolean isSend() {
return false;
}
}
그러나에서만 :
public abstract class A {
private static A objDummy;
A(String a, String b, Object[][] cArray) {
}
private static final A createDummy() {
if (objDummy == null) {
objDummy = new ASubclass(null, null, null);
}
return objDummy;
}
private static class ASubclass extends A {
ASubclass(String a, String b, Object[][] cArray) {
super(a, b, cArray);
}
final void init(String a, String b, Object[][] cArray) {
}
public final boolean isSend() {
return false;
}
}
}
구조체를 더 잘 보이게하기 위해 소스를 다시 포맷하기 위해 자유를 사용했습니다 (공백 만 수정하고 다른 변경 사항은 없음). –
@ Joachim : 감사합니다. 잘못된 서식에 대해 사과드립니다! 신속한 답변을 위해 모든 회원에게 감사드립니다 !! – Raiden