重写( override)and 重载(overload)
Posted Me-Newbie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重写( override)and 重载(overload)相关的知识,希望对你有一定的参考价值。
重写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();
}
}
重载的规则
每一个重载的方法或者构造函数都必须有不同的参数列表(类型,个数,顺序)
最常用的重载是构造函数
被重载的方法可以改变返回值,访问权限
被重载的方法可以声明新的或者更广的检查异常,但是不能声明更广的强制异常
方法可以在同一个类中或者子类中被重载
以上是关于重写( override)and 重载(overload)的主要内容,如果未能解决你的问题,请参考以下文章
面向对象重写(override)与重载(overload)区别