Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,下面详细介绍你要了解的区别。

Java的多态机制

即重写,重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化,例如:

1 classAnimal{2 void eat(){ System.out.print("animal eat");}3 }4

5 class Tiger extendsAnimal{6 void eat(){System.out.print("Tiget eat");}7 }

子类中的eat方法即对父类的eat方法实现了重写,重写最常见的例子就是下面的声明:

Animal some=new Tiger();

关于重写,遵循以下的规则:

(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。

(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。

(3)只有实例方法才能被重写,超类中的final方法不能被重写。

(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。

(5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。

(6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。

Java的重载机制:

重载的实质:在一个类中使用签名相同的多个方法。

按照范围,可以将重载分为在一个类中重载,和在子类和父类中重载。现分别解释如下:

1.在一个类中定义多个具有相同签名的方法,这些方法必须具有不同的参数列表,比如一个类的构造函数。

2.在父类和子类中,子类由于继承而拥有了父类的某些方法,此时在子类再定义具有相同签名的方法(必须具有不同的参数列表),这个地方很容易和重写相混淆,因此千万注意。

重载的规则主要记住亮点:

一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。

二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。

注意下面的一种情况:(重写和重载的混合)

classUseAnimal{voiddoStuff(Animal sa){}voiddoStuff(Tiger sa){}public static voidmain(String[] args){

UseAnimal ua=newUseAnimal();

Animal an=newTiger();

ua.duStuff(an);

}

}

此时,调用的方法doStuff的Animal版本,因为调用重载方法是在编译时决定的,an的声明类型是Animal。所以调用Animal版本。

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

java重载父类方法_子类重载父类方法相关推荐

  1. Java中方法的继承以及父类未被子类覆盖的方法调用的问题

    在看java继承这一块的时候发现了一个问题,即父类未被子类覆盖的方法是如何调用的? 是子类拥有了父类的该方法只是没有显示表示,还是子类调用了父类的该方法. 为此做了一下验证 代码如下: public ...

  2. java向上转型不能调用子类独有的方法

    向上转型只能够调用子类重写的方法,子类独有的方法在父类中根本没有定义,所以父类无法找到子类独有的方法. package com.company;public class Main {public st ...

  3. java 子类的同名方法_子类父类拥有同名的方法时……

    子类父类拥有同名的方法时-- (这个程序是不能运行的) packageyanzheng; public classParentChildTest { public static voidmain(St ...

  4. java父类调用被子类重写的方法

    [转][原文]  1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象,调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解jav ...

  5. java 调用父级方法_java子类调用父类的方法是什么

    java子类调用父类的方法:1.子类的对象调用方法时,会首先在子类中查找,如果子类中没有该方法,再到父类中查找:2.如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找 ...

  6. java子类可以修改父类成员吗_子类重写父类成员方法

    最近在学习到Java的继承和多态时遇到了这样的一个问题:关于继承链中子类对父类的私有方法是否可以覆盖的问题,在此记录一下自己对这个问题解决以后的一些心得. 首先要明确:子类是不能够覆盖(重写)父类的私 ...

  7. java 调用父级方法_java子类调用父类的方法中包含子类重写的实例方法

    # 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了 # 先看代码: public class Common { public static void main(String[] args) { ...

  8. qt 子类调用父类的函数_子类调用父类方法

    当有相同的属性或者方法是this子类表示调用自己的属性或者方法, super调用父类的属性或者方法. 当子类调用的属性方法在子类中不存在时,那么this和super都是调用父类的属性或者方法 1.方式 ...

  9. java 子类 父类 转换_Java子类与父类之间的类型转换

    1.向上转换 父类的引用变量指向子类变量时,子类对象向父类对象向上转换.从子类向父类的转换不需要什么限制,只需直接蒋子类实例赋值给父类变量即可,这也是Java中多态的实现机制. 2.向下转换 在父类变 ...

  10. java子类继承父类实例_Java子类继承父类详解

    别和我说你真的懂了继承,先来看下面的代码,回答出我的问题再说 代码很简单,如下: 父类: public class T { public void run() { System.out.println ...

最新文章

  1. socket未读消息 如何设计_如何设计IM系统的消息架构?
  2. 老平台已死,整理个文档留下做纪念
  3. 如何根据sessionID获取session解决方案
  4. Abbirb120型工业机器人_ABB工业机器人-ABBIRB120结构介绍
  5. QPW 企业维度评分表(tf_company_dimesion)
  6. Win11更新22000.71:优化任务栏、右键菜单视觉风格
  7. linux杀掉进程后总是重启,Linux监控进程,进程关闭自动重启方案
  8. python 将多张大小不同的图依次放入较大的黑色背景_用户消费行为分析(Python)...
  9. 利用console.time优化js代码
  10. 前端开发常见的英语单词汇总
  11. pem加密php,PHP格式化RSA公钥私钥(pem文件)
  12. java软件测试技术栈
  13. 使用 .reg 文件操作注册表
  14. 虚拟机使用cheese调用摄像头黑屏问题解决
  15. 智齿客服Android集成流程,智齿客服接入_智齿客服客服系统如何接入网站_智齿客服接入流程_企业服务汇...
  16. HLS tag “CHARACTERISTICS”DASH的AudioPurposeCS:
  17. JavaScript (递归函数)
  18. 科创板公司数据信息爬取
  19. 【Ubuntu】自动加载第三方ko模块
  20. 全面解读惯性导航系统与技术

热门文章

  1. si4463 WDS配置参数详解
  2. JavaScript学习手册五:JS数组
  3. linux会计软件,免费好用的会计软件(Manager for Mac)
  4. 基于Android Studio和Gradle 的小米便签配置和安装
  5. Android开发艺术探索知识回顾——第0章 书本内容介绍
  6. plc secs通讯协议_一种SECSGEM通讯协议转换的方法与流程
  7. 关于SDIO接口用作TF卡接口的接法以及电压的选择
  8. Ubuntu1804安装ROS(melodic版本)
  9. JRebel设置快捷键+激活方式
  10. Android快速转战Kotlin教程