方法的重写(Overriding)和重载(Overloading)是java多态性的不一样表现,重写是父类与子类之间多态性的一种表现,重载能够理解成多态的具体表现形式。java
重写是子类对父类的容许访问的方法的实现过程进行从新编写, 返回值和形参都不能改变。即外壳不变,核心重写!ide
重写的好处在于子类能够根据须要,定义特定于本身的行为。 也就是说子类可以根据须要实现父类的方法。函数
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,可是在重写这个方法的时候不能抛出 Exception 异常,由于 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。spa
要想调用父类中被重写的方法,则必须使用关键字 super。code
要求:对象
在面向对象原则里,重写意味着能够重写任何现有方法。实例以下:blog
class Animal{ public void move(){ System.out.println("动物能够移动"); } } class Dog extends Animal{ public void move(){ System.out.println("狗能够跑和走"); } } public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move();//执行 Dog 类的方法 } }
输出结果:io
动物能够移动
狗能够跑和走
重载(overloading) 是在一个类里面,方法名字相同,而参数不一样。返回类型能够相同也能够不一样。table
每一个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。class
最经常使用的地方就是构造器的重载。
重载规则:
public class Overloading { public int test(){ System.out.println("test1"); return 1; } public void test(int a){ System.out.println("test2"); } //如下两个参数类型顺序不一样 public String test(int a,String s){ System.out.println("test3"); return "returntest3"; } public String test(String s,int a){ System.out.println("test4"); return "returntest4"; } public static void main(String[] args){ Overloading o = new Overloading(); System.out.println(o.test()); o.test(1); System.out.println(o.test(1,"test3")); System.out.println(o.test("test4",1)); } }
重载和重写区别:
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 必定不能修改 |
返回类型 | 能够修改 | 必定不能修改 |
异常 | 能够修改 | 能够减小或删除,必定不能抛出新的或者更广的异常 |
访问 | 能够修改 | 必定不能作更严格的限制(能够下降限制) |