Java重载和重写的区别
一、方法重写(overriding)
方法重写的概念:即重写的方法的方法名、参数个数、参数的类型要和父类的方法必须完全相同。类这样定义的方法称作子类重写的方法。
//父类及父类拥有的方法
class Person {
public void eat() {
System.out.println("吃!");
}
public void work() {
System.out.println("上班!");
}
public void sleep() {
System.out.println("睡!");
}
}
class Studentss extends Person {
//子类重写了父类的work方法
//可以看出方法名都是work,参数个数都是空的
public void work() {
//使用super关键字调用父类方法,执行父类的work()方法
super.work();
System.out.println("study!");
System.out.println("玩!");
}
//测试类
public static void main(String[] args)
{
Studentss stu = new Studentss(); //创建子类对象
stu.work();
}
}
输出结果:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200413144633171.png
由此可以看出重写的目的:可以隐藏从父类继承的方法,如果非要用父类的方法可以使用关键 字super.父类的方法。
重写的注意事项:
1.参数列表必须完全与被重写的方法完全相同
2.参数的返回值必须一致
3.访问权限不能比父类中被重写方法的访问权限低
4.声明为final的方法不能被重写
5.声明为static的方法也不能被重写,但是可以被再次声明
6.如果子类和父类是在同一个包,那么子类可以重写父类的所有的方法
7.private,因为私有的都继承不了,那就重写不了
8.构造方法也不能被重写
二、方法重载(overloading)
方法重载:在一个类中,方法名相同、参数不同、返回值可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
public class Overload {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
public String test(String b,int a){
System.out.println("test3");
return "returnTest3";
}
public String test(int a,String b){
System.out.println("test5");
return "returnTest5";
}
public static void main(String[] args) {
Overload o = new Overload ();
System.out.println(o.test());
o.test(1);
System.out.println(o.test("test3",1));
System.out.println(o.test(1,"test3"));
}
}
重载的注意事项:
1.方法名必须相同
2.方法的参数必须不同
3.返回类型可以相同也可以不同
参数不同包括:
1、参数的个数不同
2、参数的个数相同,但是参数列表中对应的某个参数的类型不同
小结:
方法重载(overload)和方法重写(overriding)是java中的两种多态,重写是父类和子类之间的一种多态的表现,而重载是一个类的多态表现。