重写override:是子类对父类的允许访问的方法的实现过程的重新编写,名字,返回值和形参都不能改变,即外壳不变,内心更改
重载overload:同一个类里面的方法,名字相同而参数不同,返回值可以相同也可以不相同。调用的时候根据传入的参数来匹配调用的方法。最常用的重载就是构造函数。
重写列子:
public class Animal { String name; int age;//在父类里定义了一个方法move() public void move(){ System.out.println("I can run"); }}
public class Dog { //在子类里重写方法move(),更改实现过程 public void move(){ System.out.println("i am a dog, i can run very fast"); } public static void main(String[] args){ Animal a = new Animal(); Dog b = new Dog(); a.move(); b.move(); }}
运行结果
I can run
i am a dog, i can run very fast
重写的规则:
参数列表必须与被重写的方法相同
返回值类型必须相同
访问权限不能比父类中方法的权限低。如如果在父类中的访问权限是public,在子类中不能改写成protected
父类的成员方法只能被子类重写
声明为static的方法不能被重写,但是能被再次声明
子类和父类在同一个包中,子类可以重写父类的所有方法,除了private和final的方法
子类和父类不在同一个包中,子类只能重写父类中public和protected的非final方法
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
构造函数不能被重写
重载列子:对方法move()进行重载,传入不同的参数,可以有不同的返回值类型
public class Dog { public void move(){ System.out.println("i am a dog, i can run very fast"); } public String move(String name){ return name; } public int move(int i){ return i; } public static void main(String[] args){ Animal a = new Animal(); Dog b = new Dog(); a.move(); b.move(); }}
重载的规则
每一个重载的方法或者构造函数都必须有不同的参数列表(类型,个数,顺序)
最常用的重载是构造函数
被重载的方法可以改变返回值,访问权限
被重载的方法可以声明新的或者更广的检查异常,但是不能声明更广的强制异常
方法可以在同一个类中或者子类中被重载
时间: 2024-10-01 01:12:00