重载和重写
重载和重写虽然听起来很像但是其意义与用法截然不同
1,重载
什么是重载?
重载时发生在方法中,对于方法名相同,参数列表不同。
对于一个同名的方法,若其中的参数列表中,顺序、类型、数量 不同的方法叫方法的重载。
public class MyTest {
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){
MyTest o = new MyTest();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
对于方法重载使用最多的为构造器的重载
public class Student {
private String name;
private int age;
private char sex;//性别
private float score;//成绩
public Student() {
}
public Student(String name) {
this.name = name;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Student(String name, int age, char sex, float score) {
this.name = name;
this.age = age;
this.sex = sex;
this.score = score;
}
//这些都属于构造器重载根据参数数量的不同重载
}
个人理解重载
重载就是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
重载的规则:
- 被重载的方法必须有不同的参数列表(参数个数、类型或顺序不一样);
- 被重载的方法返回类型无关,即 可以改变;
- 被重载的方法可以改变访问修饰符;
- 方法能够在同一个类中或者在一个子类中被重载。
- 不能以返回值类型作为重载函数的区分标准。
2,重写
什么是重写?
重写发生在继承中,且只有继承才能出现重写。
子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,也叫方法复写,即:有相同的方法名、参数列表、返回值类型,只是内容也许不同可以使用==@Override==查看是否为重写。就算重写了父类方法也可以调用父类的相关方法 super.方法名 即可 相当于对父类的方法进行优化
class Phone{
public void call(){
System.out.println("打电话");
}
public void playGame(){
System.out.println("打游戏");
}
public void photograph(){
System.out.println("照相");
}
}
class XM extends Phone{
String brand ="小米";
@Override
public void call() {
super.call();
System.out.println("用小米打视频电话");
}
}
个人理解重写
在子类中可以根据需要对从父类中继承来的方法进行重写,重写是对类中方法的扩充或者修改,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也可以加入了自己的东西。
重写的规则:
- 参数列表必须与被重写方法的参数列表相同
- 访问的权限不能比父类中被重写的方法的访问权限更低。如:父类是用protected,那么子类就不可以是缺省或private。
- 构造方法不能被重写
- 声明static的静态方法不能被重写
- 声明final的终结方法不能被重写
- 只有继承关系才可进行重写
3,重载和重写的区别
区别 | 重载 | 重写 |
---|---|---|
参数列表 | 必须修改 | 不可修改 |
返回类型 | 可以修改 | 不可修改 |
使用范围 | 任何地方 | 只能在有继承中使用 |
总结
- 方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型或次序不同,则称为方法的重载。
必须修改 | 不可修改 |
| 返回类型 | 可以修改 | 不可修改 |
| 使用范围 | 任何地方 | 只能在有继承中使用 |
总结
- 方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型或次序不同,则称为方法的重载。
- 方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写。