1、方法的重写(Override)(方法覆盖)

(1)重写介绍:

java SE5增加@Override注解,并不是关键字,覆写某个方法时,添加此注解。@Override可以防止在不想重载时而意外地进行重载。

  1. 父类与之类之间的多态性,对父类的函数进行重新定义。同方法名和同参数;
  2. 子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有的方法,若需要父类中原有的方法,使用super关键字;
  3. 子类函数的访问修饰符不能小于父类的;(父类为public,则子类不能为protected或者private等,只能是public的)
  4. 子类抛出异常小于等于父类方法抛出异常;
  5. 重写Override,运行时,方法重写(子类继承父类并重写方法)以及对象造型(父引用子类型对象),父子类的多态性表现,是动态分派,指令invokevirtual,在运行期间根据常量池中的类方法的符号引用解析到实际的类型上;

(2)两同两小一大原则:

两同:方法名相同,参数类型相同
两小:子类返回类型小于等于父类方法返回类型,
   子类抛出异常小于等于父类方法抛出异常,
一大:子类访问权限大于等于父类方法访问权限。

  1. 参数列表必须完全与被重写方法的相同;
  2. 返回类型必须完全与被重写方法的返回类型相同;(备注:这条信息是标准的重写方法的规则,但是在java 1.5 版本之前返回类型必须一样,1.5(包含)j 版本之后ava放宽了限制,返回类型必须小于或者等于父类方法的返回类型 )。才有了子类返回类型小于等于父类方法返回类型。在java里面这个怎么样都是正确的,谨记。
  3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。否则会有以下信息:Cannot reduce the visibility of the inherited method from Base
  4. 父类的成员方法只能被它的子类重写。
  5. 声明为final的方法不能被重写。
  6. 声明为static的方法不能被重写,但是能够被再次声明。(static和final的都不能被重写)
  7. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  8. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  9. 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者不能抛出比被重写方法声明的更广泛的强制性异常,反之则可以。
  10. 构造方法不能被重写。(构造方法属于static的)
  11. 如果不能继承一个方法,则不能重写这个方法。

2、方法的重载overload

(1)重载介绍

  1. 方法名一样,但参数类型和个数一样,返回值类型可以相同也可以不同,无法以返回类型作为重载函数的区分标准;
  2. 方法重载就是在类中创建多个方法,方法名相同,参数列表不同,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,体现多态性;
  3. 方法重载是让类以统一的方法处理不同类型数据(同方法名,不同参数列表)的一种手段;
  4. 重载overload,编译时,同一个类中,同名方法有不同参数列表(个数、类型),是一个类中多态性的表现,是静态分派,在编译期,通过静态类型而不是实际类型作为判定依据(静态方法也可以重载);

(2)构造方法的重载

【构造方法的重载】:只需要看参数即可,如果想在一个构造方法中调用另一个构造方法,那么可以使用this()的方法调用,this()括号中的参数表示目标构造方法的参数,this()必须要作为构造方法的第一跳语句,换句话说,this()之前不能有任何可执行的代码。

3、重写和重载:(多态)

底层实现(静态分派和动态分派)

  1. 重载overload,编译时,同一个类中,同名方法有不同参数列表(个数、类型),是一个类中多态性的表现,是静态分派,在编译期,通过静态类型而不是实际类型作为判定依据(静态方法也可以重载);
  2. 重写override,运行时,方法重写(子类继承父类并重写方法)以及对象造型(父引用子类型对象),父子类的多态性表现,是动态分派,指令invokevirtual,在运行期间根据常量池中的类方法的符号引用解析到实际的类型上;
    多态
    1.多态性是面向对象编程的一种特性,和方法无关;
    2.同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载——有不同的参数列表(静态多态性);
    3.当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法, 即在子类中重写该方法——相同参数,不同实现(动态多态性);
    #4、区别总结:
    单词:重载overload,重写loverride;
    形式:重载,方法名相同,参数列表不同(个数、类型、顺序);重写,方法名、返回值、参数列表都相同;
    范围:重载,是编译时的静态分派,同一个类中;重写,运行时动态分派,发生在继承的父子类中;
    权限:重载,没有权限限制;重写,子类的覆写的方法权限不能比父类的访问权限小;

Java-重载和重写的区别相关推荐

  1. java重载和重写的区别

    1.首先是含义不同 1)方法重载是在同一个类中,声明多个同名方法,通过参数列表来区分不同的方法,与参数列表的数量.类型和顺序有关,与修饰符和返回值类型以及抛出异常类型无关 2)方法重写(方法覆盖)的前 ...

  2. java重载与重写的区别你懂了吗

    目录: 1.重载 2.重写 1.重载 (1) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. (2)重载的特点: 1.方法名要一样,但是参数类型或个 ...

  3. java重载与重写的区别+重写父类equals方法的完美实现

    [0]README 0.1) 本文章节[1]和[2]的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html : 旨 ...

  4. Java 重载与重写的区别

    1.重写(Override) 从字面上看,重写就是 重新写一遍的意思.其实就是在子类中把父类本身有的方法重新写一遍.子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法 ...

  5. Java - 重载 与 重写 的区别

    静态分派与动态分派 1. 静态类型[外观类型] => 方法执行版本 => 编译期确定 2. 实际类型 => 方法执行版本 => 运行期确定 静态解析与动态连接 1. 静态解析: ...

  6. 方法的重载与重写_深入解析JAVA重载与重写的区别

    重载的概念 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可. 同一个类.相同方法名 参数列表不同:参数个数不同,参数类型不同 跟方法的权限修饰符.返回值类型.形参变量 ...

  7. JAVA重载和重写的区别?

    重载:方法名相同,参数不同(参数类型或者长度) 重载和修饰符和返回类型无关. 一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序. 二是重载对返回类型,访问修饰符,异常声明没有任何限 ...

  8. 总结java重载和重写的区别

    1.重载是参数个数 或 类型 或 顺序不一样:重写是参数列表完全一样 2.重载是同一个类中,方法与方法之间的关系:重写是不同类中,子类与父类的关系. 3.构造器可以重载,但不能重写. 4.重载可以有不 ...

  9. java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别

    目录 重载与重写的概念 重载与重写的区别 重载与重写的总结 构造器是否能被重写override 为什么函数不能根据返回类型来区分重载 重载与重写的概念 重载:同样一个方法可以根据输入参数列表的不同,做 ...

  10. 开课吧-Java常见面试题:重载和重写的区别?

    重载和重写的区别? 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性. 重载发生在一个类中,同名的方法如果有不同的参数列表(类型不同.个数不同.顺序 ...

最新文章

  1. 漫话:如何给女朋友解释什么是 Git 和 GitHub?
  2. “习惯性思维”引起的血案
  3. 缓存之 ACache
  4. 嵌入式牛人 | 这些单片机编程思想超硬核
  5. 多對多、單向一對多做ORM時最好用基于连接表的方式
  6. jframe和mysql登陆_刚写的一个从数据库读取账户和密码进行登陆的小程序~高手请无~...
  7. 非常好的在网页中显示pdf的方法
  8. java 蓝桥杯 求先序排列
  9. 简单易用的APP制作软件,KM盒子V6.3版发布
  10. 互信息python代码_转:标准化互信息NMI计算步骤及其Python实现
  11. ntp server 配置参数_NTP时间服务器的配置
  12. 装CGAL与解决QWidget: Must construct a QApplication before a QPaintDevice. 问题
  13. 拓端tecdat|R语言Copula估计边缘分布模拟收益率计算投资组合风险价值VaR与期望损失ES
  14. 克隆模式----快速与数据库比对数据
  15. 飞思卡尔k60从零开始之PLL
  16. 七彩安卓影视APP源码独立解析接口
  17. 【爬虫工具】哔哩哔哩插件姬(bilibili-plugin)
  18. 电子表格是计算机几级,计算机一级电子表格文档.doc
  19. 支付宝AR红包引出Python中的PIL小试
  20. SpringBoot 项目中在Controller 直接调用Mapper,提示:Field mapper in ‘*Controller ‘ required a bean of type ‘*Map

热门文章

  1. SAGAN(G-lab介绍)
  2. 一分钟读懂java的super关键字
  3. python迭代对象_Python迭代对象与迭代器
  4. 移动端1px像素实现技巧 - 讲解篇
  5. phpcmsV9后台入口安全问题
  6. 单机android游戏排行榜,安卓单机手机游戏推荐_十大必玩单机手机游戏
  7. matlab s函数_matlab结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct
  8. Video视频背景设计企业模板
  9. 自适应 响应式展示型企业通用网站源码 织梦dedecms模板
  10. Java底层抛出异常_总结java的exception