重载和覆盖都是针对于类的方法 一、重载(overloading) 重载是实现一个方法名实现多个方法的多态形式。可以在同一个类中实现,也可以在继承中实现。
同一个类中实现overloading: overloading可以采用参数类型不同,参数个数不同的方法进行overloading overloading不能采用返回值不同进行重载
public class Overloading { public void funcition(){ System.out.println("Overloading's function is going"); } } class Overloading2 extends Overloading{ public void function(int a){ System.out.println("Overloading2's function is going and word is int"); } public void function(float a){ System.out.println("Overloading2's function is going and word is float"); } } class run{ public static void main(String[] args) { int a = 1; float b = 2.0f; Overloading x1 = new Overloading(); Overloading2 x2 = new Overloading2(); x2.function(a); x2.function(b); Overloading y; y = x2; y.funcition(); } }二、覆盖(Overriding) 父类引用和子类引用.覆盖方法名时,调用的都是子类的方法。
子类父类,存在同名属性时: 子类引用.属性名 = 子类对象属性。 父类引用.属性名 = 父类对象属性。
public class Overriding { int a = 1; public void going(int a,float b){ System.out.println("There is Overrindclass"); } } class Overriding2 extends Overriding{ int a = 2; public void going(int a,float b){ System.out.println("There is Overrind2class"); } } class run2{ public static void main(String[] args) { Overriding2 a = new Overriding2(); Overriding b = a; int x = 1; float y =2.0f; //方法可以被覆盖 a.going(x,y); b.going(x,y); //属性不能被覆盖,父类引用先访问父类的属性,查看是否有,无再访问子类属性。 System.out.println(b.a); System.out.println(a.a); } }结果: There is Overrind2class There is Overrind2class 1 2