详细讲解Java中方法的重载和重写
首先讲讲方法的重载:
Java的重载就是在类中可以创建多个方法,它们具有相同的名字,但是却有不同的参数。
判断是否重载只有两个条件:
1)相同的方法名
2)不同的参数 具体为:
A、方法参数类型不同
B、方法参数个数不同
C、方法参数排列顺序不同
代码如下:
package com.tocean.test;//包名 public class Test1 { public void name(int i){ System.out.println("overloading"); } //方法类型不同 public void name(String name){ System.out.println("overloading"); } //方法参数个数不同 public void name(int i,String name,double c){ System.out.println("overloading"); } //参数的排列顺序不同 public void name(double c,int i ,String name){ System.out.println("overloading"); } }
与方法返回值和权限修饰符无关
代码如下:
1 package com.tocean.test;//包名 2 public class Test1 { 3 //与方法返回值无关 4 public int name(int i,String name){ 5 return i; 6 } 7 //与权限修饰符无关 8 private void name(double c) { 9 System.out.println("overloading"); 10 } 11 }
另外是方法的重写:
Java的重写前提是继承,继承的子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要方法的重写。
判断是否重写有五个条件:
A、相同的方法名
B:相同的方法参数
C:权限修饰符不能比父类更窄
D:抛出异常比父类不能更多
E:返回值和父类返回值一致或是其子类
代码如下:
package com.tocean.test; public class Father { public void getSay(String str){ System.out.println("父类在说:"+str); } } class Son extends Father{ //访问修饰符不能比父类更窄、不是方法重写 private void getSay(String str){ System.out.println("子类在说:"+str); } }
package com.tocean.test; import java.io.IOException; public class Father { public void getSay(String str) throws Exception{ System.out.println("父类在说:"+str); } } class Son extends Father{ //抛出的方法比父类更多,不是方法的重写(注意是异常的数量,不是异常的范围) private void getSay(String str) throws IOException,RuntimeException{ System.out.println("子类在说:"+str); } }
package com.tocean.test; public class Father { public String getSay(String str) { System.out.println("父类在说:"+str); return str; } } class Son extends Father{ //方法的返回值与父类相同,是方法的重写 public String getSay(String str) { System.out.println("子类在说:"+str); return str; } }
package com.tocean.test; public class Father { public Object getSay(String str) { System.out.println("父类在说:"+str); return str; } } class Son extends Father{ //方法的返回值与父类不相同相同,但是其的子类,是方法的重写 public String getSay(String str) { System.out.println("子类在说:"+str); return str; } }