方法的重写和重载
重载:函数或方法的名称相同,参数列表不同,在这多个名称相同,参数列表不同的函数或方法,就称作互相的重载。
public class Demo1 {
public static void name() {
boolean flag=true;
if(flag) {
System.out.println("我是重载函数");
}
}
public static void name(boolean flag) {
if(flag) {
System.out.println("我是重载函数");
}
}
public static void name(boolean flag,String str) {
if(flag) {
System.out.println(str);
}
}
}
上面这个例子中,name是函数名称,正常来说,如果函数名称一样应该会报错,但我这里并没有报错
所以呢,这三个方法就可以互相被称作是重载
重写:是在继承的条件下,子类跟父类的方法名相同,参数列表相同,子类将覆盖父类所原有的方法,我们称这种现象是方法的重写。如果两者不存在子父类继承关系,那么就不存在重写问题
public class Animal {
public void eat() {
System.out.println("eat......");
}
public class Dog extends Animal{
public void eat() {
System.out.println("eat bone....");
}
上面这两个方法中,Dog类继承了Animal类,也就重写了它的eat方法,所以最后输出的结果是eat bone…。
在很多时候,初学者分不清重写与重载,我们可以用它们的特点简单的区分一下:
**重写的特点**:
1.发生在子父类关系当中,所以他们有一定的继承关系;
2.重写方法的名称,参数列表,返回值类型必须一摸一样;
3.重写方法的访问限制等级可以比被重写的方法低,但是不能比被重写的方
法的访问限制等级低(就例如父类方法是public的等级,那么子类的重写方
法就不能是private的等级)
4.重写方法的抛出的异常不能比被重写的方法抛出异常的范围更广,重写方
法的抛出范围可以更小或不写(例如父类方法抛出IOException,重写的子类就
不能Exception)
5.如果被final关键字修饰则不能被重写
(当然重写有一个特殊情况,private关键字隐式包含final关键字,所以被private修饰的方法不能被继承,所以就更不可能被重写,也只是两个名字相同的方法罢了,跟父类方法没有任何关系)
**重载的特点**:
1.被重载的方法必须改变参数列表
2.被重载的方法可以改变返回类,访问限制,可以抛出更广的异常
3.能够在同一个类或者在子类中被重载
(重载通俗的讲,这些方法的名字是一样的,参数列表必须不一样,剩下的并没有太多的要求。)
如果对继承有疑问可以去看我的上次笔记:
Java小白记录学习路线(java基础)-----面向对象