概念
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{ //子类override 27 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 }