概念
1、重写:看调用方法的对象:如果调用的是子类对象,则无论父类/子类引用类型,调用的都是重写后的方法,如果想调用父类的方法,用super.方法 来调;如果调用的是父类对象,则调用的是父类重写前的方法。
2、区别:1)重写--父子类中,完全相同(签名相同)的方法。如何调用,取决于调用对象,而不是引用类型。
2)重载--同一个类中,方法名相同,参数列表不同的方法。调用取决于方法结构(有无参数)。
测试小程序
1 package day02; 2 3 /** 4 * Created by Administrator on 17-5-25. 5 */ 6 7 public class OverRideTest { 8 public static void main(String[] args){ 9 B n = new B(); //子类对象10 n.a();11 12 A t = new B(); //向上造型,子类对象13 t.a();14 15 A x = new A(); //父类对象16 x.a();17 }18 }19 20 class A{21 void a(){22 System.out.println("A.a()");23 }24 }25 26 class B extends A{ //子类override27 void a(){28 System.out.println("B.b()");29 }30 }
重写、重载
1 package day02; 2 3 /** 4 * Created by Administrator on 17-5-25. 5 */ 6 7 //重载:编译时--无对象; 重写:运行时; 8 public class OverLoadTest { 9 public static void main(String[] args){10 Ao x = new Bo(); //向上造型11 Co m = new Co();12 m.c(x);13 }14 }15 16 class Ao{17 void n(){18 System.out.println("Ao");19 }20 }21 22 class Bo extends Ao{23 void n(){24 System.out.println("Bo");25 }26 }27 28 class Co{29 void c(Ao t){30 System.out.println("Co.c(x)");31 t.n();32 }33 34 void c(Bo t){35 System.out.println("Co.c()");36 t.n();37 }38 }