مشخصات مقاله
-
1507
-
0.0
-
3284
-
0
-
0
آموزش Java – مدیریت خطاها با method overriding در Java
آموزش Java – مدیریت خطاها با method overriding در Java
اگر بخواهید از (بازنویسی متد کلاس پدر در سطح کلاس فرزند) method overriding برای مدیریت خطاها استفاده کنید، قواعد و نکات متعددی وجود دارد که باید آن ها را رعایت نمایید.در زیر به آن ها اشاره می کنیم:
چنانچه کلاس پدر exception ای را با کلیدواژه ی throws اعلان نکرده باشد
- اگر کلاس پدر یک خطا را با کلیدواژه ی throws اعلان نکرده باشد، متد بازنویسی شده در بدنه ی کلاس فرزند نمی تواند خطای زمان کامپایل (checked) را اعلان کند اما می تواند خطای زمان اجرا را اعلان کند و مشکلی رخ نمی دهد.
چنانچه متد کلاس پدر یک خطا با کلیدواژه ی throws اعلان کند
- اگر متد کلاس پدر یک خطا اعلان کرده باشد، متد بازنویسی شده از کلاس پدر در کلاس فرزند می تواند همان خطا، subclass exception (خطایی که مشتق شده از کلاس exception اعلان شده در سطح کلاس پدر است) یا اصلا هیچ خطایی را اعلان نکند. اما نمی تواند parent exception (کلاس exception ای که خطای اعلان شده در superclass از جنس آن می باشد) را اعلان نماید.
چنانچه کلاس پدر exception ای را با کلیدواژه ی throws اعلان نکرده باشد
اگر کلاس پدر یک خطا را با کلیدواژه ی throws اعلان نکرده باشد، متد بازنویسی شده در بدنه ی کلاس فرزند نمی تواند خطای زمان کامپایل (checked) را اعلان کند.
import java.io.*;
class Parent{
void msg(){System.out.println("parent");}
}
class TestExceptionChild extends Parent{
void msg()throws IOException{
System.out.println("TestExceptionChild");
}
public static void main(String args[]){
Parent p=new TestExceptionChild();
p.msg();
}
}
خروجی:
Compile Time Error
اگر متد کلاس پدر یک خطا اعلان کرده باشد، متد بازنویسی شده از کلاس پدر در کلاس فرزند می تواند همان خطا، subclass exception (خطایی که مشتق شده از کلاس exception اعلان شده در سطح کلاس پدر است) یا اصلا هیچ خطایی را اعلان نکند. اما نمی تواند parent exception را اعلان نماید.
import java.io.*;
class Parent{
void msg(){System.out.println("parent");}
}
class TestExceptionChild1 extends Parent{
void msg()throws ArithmeticException{
System.out.println("child");
}
public static void main(String args[]){
Parent p=new TestExceptionChild1();
p.msg();
}
}
خروجی:
child
چنانچه متد کلاس پدر یک خطا با کلیدواژه ی throws اعلان کند
اگر متد کلاس پدر یک خطا اعلان کرده باشد، متد بازنویسی شده از کلاس پدر در کلاس فرزند می تواند همان خطا، subclass exception (خطایی که مشتق شده از کلاس exception اعلان شده در سطح کلاس پدر است) یا اصلا هیچ خطایی را اعلان نکند. اما نمی تواند parent exception را اعلان نماید.
مثال کاربردی از متد بازنویسی شده ی کلاس پدر در سطح کلاس فرزند که parent exception را اعلان می کند
import java.io.*;
class Parent{
void msg()throws ArithmeticException{System.out.println("parent");}
}
class TestExceptionChild2 extends Parent{
void msg()throws Exception{System.out.println("child");}
public static void main(String args[]){
Parent p=new TestExceptionChild2();
try{
p.msg();
}catch(Exception e){}
}
}
خروجی:
Compile Time Error
مثال کاربردی از متد بازنویسی شده از کلاس پدر در کلاس فرزند که همان خطا را اعلان می کند
import java.io.*;
class Parent{
void msg()throws Exception{System.out.println("parent");}
}
class TestExceptionChild3 extends Parent{
void msg()throws Exception{System.out.println("child");}
public static void main(String args[]){
Parent p=new TestExceptionChild3();
try{
p.msg();
}catch(Exception e){}
}
}
خروجی:
child
مثال کاربردی از متد بازنویسی شده ی کلاس پدر در کلاس فرزند که خطای subclass را اعلان می کند
import java.io.*;
class Parent{
void msg()throws Exception{System.out.println("parent");}
}
class TestExceptionChild4 extends Parent{
void msg()throws ArithmeticException{System.out.println("child");}
public static void main(String args[]){
Parent p=new TestExceptionChild4();
try{
p.msg();
}catch(Exception e){}
}
}
خروجی:
child
مثال کاربردی از متد بازنویسی شده ی کلاس پدر در سطح کلاس فرزند که هیچ خطایی اعلان نمی کند
import java.io.*;
class Parent{
void msg()throws Exception{System.out.println("parent");}
}
class TestExceptionChild5 extends Parent{
void msg(){System.out.println("child");}
public static void main(String args[]){
Parent p=new TestExceptionChild5();
try{
p.msg();
}catch(Exception e){}
}
}
خروجی:
child