0. 什么是方法?html
方法是指java类中定义的一段代码体,实际上与c语言中的函数并没有不一样。方法的基本组成部分包括返回值、方法名称、参数和方法体,下面是一个方法最基本的形式:java
1 返回值类型 方法名称(参数列表){ 2 方法体 3 }
1.方法重载(overloading)函数
方法重载是指在同一个类中,两个或两个以上方法的方法名称相同但它们的参数(包括参数类型、参数个数和参数顺序)不一样。这样,在调用该方法时,根据传入的参数不一样,执行的具体逻辑不一样。post
下面的代码是方法重载的几种例子:测试
void A(){逻辑1;} void A(int i){逻辑2;}//与逻辑1相比,参数个数不一样 void A(String s){逻辑3;}//与逻辑2相比,参数类型不一样 void A(int i,String s){逻辑4;}// void A(String s,int i){逻辑5;}//与逻辑4相比,参数顺序不一样 int A(String s,String str){逻辑6;}//方法重载时,返回值类型能够变化,可是参数必须跟其余方法不一样,不然编译报错 #错误示范:下行代码与第1行冲突,编译会报错 //int A(){逻辑6}
注意点:url
(1)一个方法能够被重载无数次;spa
(2)构成重载的各个方法之间惟一要求的不一样就是参数必须不一样,返回值类型、访问修饰符、抛出异常等其余因素能够相同,也能够不一样;code
(3)在继承时,子类也能够重载基类的方法。htm
2.方法重写(overriding)对象
方法重写,又被称为方法覆盖。重写是指子类方法与父类方法的返回值类型、方法名称和参数(参数个数、参数顺序和参数类型)彻底一致。当调用一个声明为基类类型的子类对象的重写方法时,java虚拟机可以根据该对象的实际类型执行指定的重写版本(eg.当某个基类拥有多个子类而且某个基类方法被多个基类重写时)。
重写实例:在下面的代码中,在同一目录下建立了三个java文件:Base.java,Sub.java和Test.java。其中,Base.java中建立了Base类,Base类中只有一个方法A;Sub.java经过继承Base类建立了Sub类,并在Sub类中重写了Base类的A方法;最后,在Test.java中的main方法中建立了一个Sub对象eg,而且eg被声明为Base类型。调用对象eg的A方法,经过输出结果,能够看出java虚拟机在运行第15行代码时执行的是Sub类中的A方法,而不是Base类中的A方法。
值得注意的是,在编译下面的代码第15行时java编译器并不知道eg的确切类型,所以一般会指望它的编译结果是调用基类(即Base类)的A方法,而在运行时java虚拟机提供的多态机制会保证调用的是Sub类的A方法(如需了解多态,请阅读封装、继承、多态--java第3部分)。
1 //Base.java:基类
2 public class Base{
3 public void A(){System.out.println("This is Base Class.");)} 4 } 5 6 //Sub.java:子类 7 public class Sub extends Base{ 8 public void A(){System.out.println("This is Sub Class.");} 9 } 10 11 //Test.java:多态测试 12 public class Test{ 13 public static void main(String[] args){ 14 Base eg = new Sub(); 15 eg.A(); 16 } 17 }
//输出结果
This is Sub Class.
3.总结
3.1 两者与多态的关系
重载与多态无关,重写方法的正确运行须要多态机制的支持。
3.2 两者区别
重载和重写的最大区别在于重载是针对一个方法、不一样参数的多个版本,而重写是针对一个方法、相同参数、相同返回值类型可是不一样类型(多个子类和基类中)的多个版本。换句话说,重写后的方法与重写前的方法除了所处的java类不一样外其余(返回值类型、抛出异常、参数、方法名称等)均相同,而重载的方法之间惟一的强制要求就是方法名相同且参数不一样,其余(返回值类型、抛出异常、参数、方法名称等)能够相同,也能够不一样。