Java의 예외에는 부모-자식 클래스의 문제가 포함되며, 이는 한 문장으로 요약 될 수 있습니다. 서브 클래스의 생성자가 던진 예외는 부모 클래스의 예외를 포함해야합니다. 서브 클래스의 방법은 부모 클래스 "범위가 작거나 같은"또는 예외를 제외하거나 예외를 제외 할 수 있습니다.
1. 생성자가 왜 부모 클래스를 포함하는 예외를 던져야합니까?
"Java의 Thingking in Java"의 구절이 있습니다.
예외 제한 : 메소드를 덮어 쓰면 기본 클래스 메소드의 예외 설명에 나열된 예외 만 던질 수 있습니다.
예외 제한은 생성자에 대해 작동하지 않으므로 StormYinning의 생성자는 기본 클래스 생성자가 던진 예외에주의를 기울이지 않고 예외를 던질 수 있음을 알게됩니다. 그러나 생성자는 어떤 방식 으로든 호출되어야하므로 서브 클래스 생성자의 예외 설명에는 기본 클래스 생성자의 예외 설명이 포함되어야합니다.
이 구절은 처음에는 약간 혼란 스럽지만 읽은 후에는 이해할 것입니다.
우선, 예외 설명은 오버라이드 메소드에만 해당되며 생성자는 분명히이 범위 내에 있지 않으므로 서브 클래스 생성자는 부모 생성자가 던진 예외를 고려하지 않고도 예외를 던질 수 있습니다. 그러나 새로운 서브 클래스 객체 인 경우, 상위 클래스 생성자가 확실히 호출되므로 서브 클래스 생성자가 호출 한 해당 부모 클래스 생성자가 제외 한 예외를 고려해야합니다. 이 시점에서 "서브 클래스 생성자는 상위 클래스 생성자가 던진 예외 (나중에 언급 될 예정)를 포착 할 수 없기 때문에 서브 클래스 생성자는이 예외를 던져야합니다.
Class SomeException 확장 예외 {} 클래스 TheOtherException Exceptens Exception {} class basec {public basec () soxception {} public basec (int a) throws theotherexception {}} class subc는 basec {public subcection //에서 {super ()에 대해보고됩니다. // Super (37)는 던져 질 것입니다. // super ()를 이것으로 바꾸면 theotherexception을 던져야}}2. 왜 서브 클래스 생성자가 부모 클래스 생성자가 던진 예외를 잡을 수 없습니까?
서브 클래스가 상위 클래스가 던진 예외를 포착하려면 콜 Super ()를 표시해야합니다. 또는 슈퍼 (xxx ...); 그러나 Super () 및 this ()는 기능이 있습니다.이 기능은 첫 번째 줄에 배치해야하며 {} catch {}를 시도하는 것과는 대조적이므로 캡처 할 수 없습니다.
3. 서브 클래스에 의해 상속 된 상위 클래스와 인터페이스가 동일한 메소드 이름을 갖는 경우, 처리 방법은 예외 제한을 따라야합니다.
클래스 일부 exception 확장 예외 {} class theotherexception 확장 exception {} interface interf {public void function ()가 theotherexception; } class basec {public void function ()는 약간의 exception {}} class subc를 확장합니다. basec empless interf {// 이시기에는 공개 void function () {} // 예외 만 던질 수 없습니다. interf.function ()에서 wrows void function ()에서 wrows void function ()에서 throws void function ()과 호환되지 않습니다. // 오류 : 예외 theOtherException은 basec.function ()의 Throws 절과 호환되지 않습니다. }4. 왜 서브 클래스가 기본 클래스 방법의 예외 설명에 나열된 예외 만 던지는가?
서브 클래스는 상위 클래스로의 상향 변환 가능성이 있기 때문에 서브 클래스가 마음대로 예외를 제외 할 수 있으면 서브 클래스가 상위 클래스로 변환되면 메소드의 인터페이스 (케이스라고 부르면)는 모 부모 클래스의 메소드 유형이됩니다. 이 시점에서 문제는 서브 클래스가 예외를 제외 할 것이지만 부모 클래스는 예외를 처리 할 수 없다는 것입니다. 따라서, 대체 가능한 유형의 객체를 보장하기 위해서, "기본 클래스 방법의 예외 설명에 나열된 예외 만 던져져야한다"고 필수적이다.
여기에 언급 된 "예외"에는 이러한 예외가 포함되어 있습니다.
5. 이것이 계산되는지 모르겠습니다. 어쩌면 나는 비교적 어리 석다. 나는 그것을 이해하기 전에 오랫동안 그것에 대해 생각했다. 지금은 적어 봅시다.
Class SomeException 확장 예외 {} class basec {public void function ()는 약간의 exception {} // 여기에 던져진 예외가 런타임 예외 인 경우 예외를 처리 할 수 없다면 class subc는 basec {<br> // super.functions ()에 의해 수행되는 Super.Function ()에 속해야하며,이 기능을 수행하지 않아야합니다. 예외 처리! /* public void function ()는 exception {super.function (); } */ public void function () {try {super.function (); } catch (somexception e) {e.printstacktrace (); }}}Java를 기반으로 아버지와 아동 수업과 관련된 예외에 대한 위의 자세한 설명은 내가 당신과 공유하는 모든 내용입니다. 나는 그것이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.