Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,下面详细介绍你要了解的区别。
Java的多态机制
即重写,重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化,例如:
class Animal{
void eat(){ System.out.print("animal eat");}
}
class Tiger extends Animal{
void eat(){System.out.print("Tiget eat");}
}
子类中的eat方法即对父类的eat方法实现了重写,重写最常见的例子就是下面的声明:
Animal some=new Tiger();
关于重写,遵循以下的规则:
(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。
(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。
(3)只有实例方法才能被重写,超类中的final方法不能被重写。
(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。
(5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。
(6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。
Java的重载机制:
重载的实质:在一个类中使用签名相同的多个方法。
按照范围,可以将重载分为在一个类中重载,和在子类和父类中重载。现分别解释如下:
1.在一个类中定义多个具有相同签名的方法,这些方法必须具有不同的参数列表,比如一个类的构造函数。
2.在父类和子类中,子类由于继承而拥有了父类的某些方法,此时在子类再定义具有相同签名的方法(必须具有不同的参数列表),这个地方很容易和重写相混淆,因此千万注意。
重载的规则主要记住亮点:
一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。
二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。
注意下面的一种情况:(重写和重载的混合)
class UseAnimal{
void doStuff(Animal sa){}
void doStuff(Tiger sa){}
public static void main(String[] args){
UseAnimal ua=new UseAnimal();
Animal an=new Tiger();
ua.duStuff(an);
}
}
此时,调用的方法doStuff的Animal版本,因为调用重载方法是在编译时决定的,an的声明类型是Animal。所以调用Animal版本。
始终注意一点:重载的判断始终是在编译时决定
分享到:
相关推荐
JAVA重写和重载.pdf
NULL 博文链接:https://zhycaf.iteye.com/blog/980334
本文主要介绍Java 的重载和重写,学习java的同学都知道Java的多态有多重要,这里给大家举例说明函数的重载和重写,希望能帮助有需要的小伙伴
描述了重写与重载,及线程的一个例题纠错
我根据我的理解来谈谈Java中重写方法与重载方法的区别。 重写 Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类...
主要总结了java中的重载和重写的区别,供大家理解参考,有问题可以补充
对Java中方法的重载和重写的具体描述,有利于区分方法的重载和重写
主要介绍了Java重写(Override)与重载(Overload)区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java中重载和重写总结,基础知识,概念分清楚,补充基础知识
JAVA中的方法重写与方法重载的区别,还算挺详细的
重载与重写的区别,详细描述了java中重载与重写的区别。
java 对重载的应用,区别 重载 重写的 区别。让大家认识重载
对java中重载和重写的概念做了详细的介绍和比较
重写与重载.png java分析
主要介绍了Java中继承、多态、重载和重写介绍,需要的朋友可以参考下
本篇文章通过实例详细介绍了重写与重载,以及他们的区别,需要的朋友可以参考下
主要介绍了Java方法重载和重写原理区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
希望能给大家带来方便,也希望大家能多上传资料共同学些
重写和重载的区别