重载与重写都是java多态性的一种表现,但是又有不同,从重写是父类与子类之间多态的一种表现,重载是一个类多态的表现。多说无益,直接上实例:
重写:
class RewriteClass{ public void test(){ System.out.println("我是父类中的方法"); } } class Rewrite extends RewriteClass{ public void test(){ super.test();//调用父类中的方法 System.out.println("我重写了父类中的方法"); } } public class RewriteDemo { public static void main(String args[]){ RewriteClass rewriteClass=new RewriteClass(); Rewrite rewrite=new Rewrite(); rewriteClass.test(); rewrite.test(); } }运行结果:
我是父类中的方法 我是父类中的方法 我重写了父类中的方法
重载:
public class ReloadClass { public void test(){ System.out.println("我是原配"); } public void test(String name){ System.out.println("我是小三:"+name); } public String test(String name,int age){ System.out.println("我是小四,我的名字叫"+name+",正值花季,才"+age+"岁"); return"小四"; } public static void main(String args[]){ ReloadClass reloadClass=new ReloadClass(); reloadClass.test(); reloadClass.test("傻姑"); reloadClass.test("翠花",38); } }运行结果:
我是原配 我是小三:傻姑 我是小四,我的名字叫翠花,正值花季,才38岁看到这里代码君是不是有一些想法了,下面我就来对比一下重写和重载的异同:
区别 | 重写 | 重载 |
参数 | 一定不能修改 | 必须要修改 |
返回值类型 | 不能变 | 可以变 |
异常 | 可以减少甚至删除,但是不能抛出比父类级别高的异常,例如父类是IOException,子类就不能是Exception了,因为Exception是IOException的父异常 | 可以修改 |
访问 | 不能比父类级别更低,例如父类是public,子类不可以是private哦 | 可以修改 |
大概就那么多,代码君多用就明白了,与君共勉