5 6 7 8 9
System.out.print(i); }
void test(byte b) {
System.out.print(b);
10 } 11 }
12 public class TestOverriding extends Base 13 {
14 void test(int i) 15 { 16 i++;
17 System.out.println(i); 18 }
19 public static void main(String[]agrs) 20 {
21 Base b=new TestOverriding(); 22 b.test(0)
23 b.test((byte)0) 24 } 25 }
这时的输出结果是1 0,这是运行时动态绑定的结果。
重写的主要优点是能够定义某个子类特有的特征:
?
1 2 3 4 5 6 7 8 9
publicclassFather{ publicvoidspeak(){
System.out.println(Father); } }
publicclassSonextendsFather{ publicvoidspeak(){
System.out.println(\ }
10 }
这也叫做多态性,重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。
当上例中Father类speak()方法被private时,Son类不能重写出Father类speak()方法,此时Son类speak()方法相当与在Son类中定义的一个speak()方法。
Father类speak()方法一但被final时,无论该方法被public,protected及默认所修饰时,Son类根本不能重写Father类speak()方法, 试图编译代码时,编译器会报错。例:
? 1 2 3 4 5
publicclassFather{ finalpublicvoidspeak(){
System.out.println(\ } }
6 7 8 9
publicclassSonextendsFather{ publicvoidspeak(){
System.out.println(\ }
10 }//编译器会报错;
Father类speak()方法被默认修饰时,只能在同一包中,被其子类被重写,如果不在同一包则不能重写。
Father类speak()方法被protoeted时,不仅在同一包中,被其子类被重写,还可以不同包的子类重写。
重写方法的规则:
1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。 3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
而重载的规则:
1、必须具有不同的参数列表;
2、可以有不责骂的返回类型,只要参数列表不同就可以了;
3、可以有不同的访问修饰符; 4、可以抛出不同的异常;
重写与重载的区别在于:
重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。
用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库JAVA重写和重载(3)在线全文阅读。
相关推荐: