在对类关系的讨论上,我们可以对类或者是子类进行操作。如果是类的处理,我们可以选择重载。要是针对于子类的定义,就要用到重写。很多新学java的小伙伴会在这两个知识点上混淆概念,所以今天小编整理出了二者上的不同点。接下来我们会从定义、格式、用法上进行分析,探寻重写和重载的不同。
一.定义不同
重写(Override):发生在父子类中,是父类与子类之间的多态性,实质是对父类的函数进行重新定义。
重载(Overload):发生在1个类里面,是让类以统一的方式处理不同类型数据的一种手段,实质表现就是允许一个类中存在多个具有不同参数个数或者类型的同名方法,是一个类中多态性的一种表现。
二.格式不同
重写格式特点:
1.方法名、参数列表必须完全一致
2.返回类型可以相同,也可以不同,不同必须是原来返回类型的子类型(可隐式转换即可)JAVA近期版本的新特性,在之前子类返回值类型必须和父类返回值类型保持一致
2.子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
4.**静态只能重写静态。但是这种情况一般不会出现。
重载格式特点:
1.方法名相同。
2.方法的参数表必须不同
如果参数个数不同,就不管它的参数类型了!
如果参数个数相同,那么参数的类型必须不同。
3.方法的返回类型、修饰符可以相同,也可不同。
三、用法不同
重写
package com.etime09; public class Person { //创建一个父类Person private String name; private int age; //父类中写一个eat()方法 public void eat() { System.out.println("人都要吃饭"); } } --------------------------------------------- package com.etime09; public class Student extends Person { //Student子类继承Person父类 @Override //重写eat()方法 方法名,参数,返回类型相同;方法体内容不同 public void eat() { System.out.println("学生喜欢吃肉"); } }
重载
package com.etime09; public class Goods { //创建一个商品类 private String ID; private int price; private String name; private String manufactureDate; //实现构造函数的重载 参数个数或类型不同 public Goods() { super(); // TODO Auto-generated constructor stub } public Goods(String iD) { super(); ID = iD; } public Goods(String iD, int price) { super(); ID = iD; this.price = price; } public Goods(String iD, int price, String name) { super(); ID = iD; this.price = price; this.name = name; } public Goods(String iD, int price, String name, String manufactureDate) { super(); ID = iD; this.price = price; this.name = name; this.manufactureDate = manufactureDate; }
以上就是我们在java中对于重写和重载不同点的讨论,相信大家现在已经能分清二者的不同了,下次使用的时候不要再把二者的概念记错啦。