本文系转载:http://zhidao.baidu.com/link?url=g-6vfdVd0DQ9G-fxjOGYm6oVqZh7BnXgIZcb63oz9xMfQla-7Uc2Rm0UaD1iYl6IPrIZ68dUmiApBMuLg3WcQq

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版本。

始终注意一点:重载的判断始终是在编译时决定

转载于:https://www.cnblogs.com/richard-c-java/p/3520793.html

[重写] 与 [重载]相关推荐

  1. C# 继承实现父类方法、重写、重载

    继承是派生类(子类)去实现(重写<override>.重构<new>)基类(父类)的方法或属性.从而获取在派生类中要实现的功能. 子类调用父类构造方法,在父类中有个实现姓名和年 ...

  2. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载

    <?php /**构造方法__construct析构方法__destruct使用方法 PHP重写与重载*/ //构造方法:当实例化对象时,自动运行的方法 /*class channel{func ...

  3. 【Java基础】重写与重载

    为什么80%的码农都做不了架构师?>>>    重写(Override): 定义:在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类 ...

  4. 重写与重载的区别 以及 重写中super的使用

    重写是父类方法与子类方法有共同的参数名参数列表,返回类型必须父类的方法一致.子类的访问修饰符一定要大于等于父类的访问修饰符.如果在子类中还需要用到父类的方法,用super.method() 然后继续写 ...

  5. Java的重写和重载机制

    Java的重写和重载机制 张磊 zhangleispirit@gmail.com Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,本文主要在此做一个归纳总结. ...

  6. float 与 double、隐式类型转换、switch、重写与重载、Java 与 C++ 的区别、JRE or JDK

    1.float 与 double 1.1 字面量属于 double 类型,不能直接将 1.1 直接赋值给 float 变量,因为这是向下转型. // float f = 1.1; Java 不能隐式执 ...

  7. Java继承、重写与重载 笔记

    1. Java继承 继承要符合的关系是:is-a,父类更通用,子类更具体. 1.1 继承的特性 子类拥有父类非private的属性,方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子 ...

  8. Java基础之重写与重载深入解析

    Java详解重写与重载 首语 总结java重写与重载的时候,在菜鸟教程看到很详细的解释,觉得很好,就搬过来了,侵删. url:https://www.runoob.com/java/java-over ...

  9. Java重载和重写6_深入理解Java中的重写和重载

    深入理解Java中的重写和重载 重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念.但是对于新手来说也比较容易混淆.本文通过两个简单的例子说明了他们之间的区别. ...

  10. Java 重写与重载

    方法的重写: 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变. 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类能够根据需要实现父类的方法. 重写 ...

最新文章

  1. java查看内存地址_Java内存机制和内存地址
  2. 《预训练周刊》第36期: 谷歌提出梯度最大化增长方法GradMax
  3. UML建模系列文章总结
  4. xor java_java基于密匙的xor加解密
  5. python 自然语言处理(三)获取词性
  6. 吴恩达深度学习笔记11-Course4-Week2【深度卷积网络:实例探究】
  7. Fiori Hash url的生成原理
  8. mysql5.6.35安装_mysql5.6.35 二进制快速安装
  9. 学习Jsoup(一)
  10. NLPIR使用(1)
  11. python settings_python settings如何配置sqlite?
  12. 智能优化算法:乌鸦搜索算法-附代码
  13. SAP 查询物料的非限制库存、质检库存、冻结库存
  14. React中获取地址栏传参
  15. vue中watch进行ajax,vue watch自动检测数据变化实时渲染的方法
  16. 【深度学习】BatchSize设置
  17. js每日一题(11)
  18. lucene in ation 第三章(1) sear…
  19. 企业上云,打造数字经济新动能
  20. 5个PPT素材、模板网站,建议收藏~

热门文章

  1. 人生三量:度量,胆量,心量
  2. 网管员职业规划专家问答
  3. cesium 3Dtiles、地图 自动旋转、罗盘控件
  4. Arduino-蜂鸣器(葫芦娃~)
  5. Alian解读SpringBoot 2.6.0 源码(四):启动流程分析之应用环境准备
  6. 专职安全员办公用计算机,3.安全生产审批制度、专项费用保证措施
  7. Is the server running on host “localhost“ (127.0.0.1) and accepting TCP/IP connections on port 5432?
  8. 【算法】跑ORB-SLAM3遇到的问题、解决方法、效果展示(环境:Ubuntu18.04+ROS melodic)
  9. sequelize常见用法
  10. 用了十年的昵称badboy_我,轻舞飞扬,用QQ二十年了