前面声明过,重载方法允许Java支持运行时多态性。多态性是面向对象编程的本质,原因如下:它允许通用类指定方法,这些方法对该类的所有派生类都是公用的。

同时该方法允许子类定义这些方法中的某些或全部的特殊实现。重载方法是Java实现它的多态性——“一个接口,多个方法”的另一种方式。成功应用多态的关键部分是理解超类和子类形成了一个从简单到复杂类层次。

正确应用多态,超类提供子类可以直接运用的所有元素。多态也定义了这些派生类必须自己实现的方法。这允许子类在加强一致接口的同时,灵活的定义它们自己的方法。

这样,通过继承和重载方法的联合,超类可以定义供它的所有子类使用的方法的通用形式。

动态的运行时多态是面向对象设计代码重用的一个最强大的机制。现有代码库在维持抽象接口同时不重新编译的情况下调用新类实例的能力是一个极其强大的工具。

让我们看一个运用方法重载的更实际的例子。下面的程序创建了一个名为Figure的超类,它存储不同二维对象的大小。它还定义了一个方法area( ),该方法计算对象的面积。程序从Figure派生了两个子类。第一个是Rectangle,第二个是Triangle。每个子类重载area( )方法,它们分别返回一个矩形和一个三角形的面积。

// Using run-time polymorphism.
class Figure { double dim1; double dim2; Figure(double a, double b) { dim1 = a; dim2 = b; } double area() { System.out.println("Area for Figure is undefined."); return 0; }
}
class Rectangle extends Figure { Rectangle(double a, double b) { super(a, b); } // override area for rectangle double area() { System.out.println("Inside Area for Rectangle."); return dim1 * dim2; }
}
class Triangle extends Figure { Triangle(double a, double b) { super(a, b); } // override area for right triangle double area() { System.out.println("Inside Area for Triangle."); return dim1 * dim2 / 2; }
}
class FindAreas { public static void main(String args[]) { Figure f = new Figure(10, 10); Rectangle r = new Rectangle(9, 5); Triangle t = new Triangle(10, 8); Figure figref; figref = r; System.out.println("Area is " + figref.area()); figref = t; System.out.println("Area is " + figref.area()); figref = f; System.out.println("Area is " + figref.area()); }
}

该程序输出如下:

Inside Area for Rectangle.
Area is 45
Inside Area for Triangle.
Area is 40
Area for Figure is undefined.
Area is 0

通过继承和运行时多态的双重机制,可以定义一个被很多不同却有关的对象类型运用的一致的接口。

这种情况下,如果一个对象是从Figure派生,那么它的面积可以由调用area( )来获得。无论用到哪种图形的类型,该操作的接口是相同的。

通过继承和运行时多态的双重机制,可以定义一个被很多不同却有关的对象类型运用的一致的接口。这种情况下,如果一个对象是从Figure派生,那么它的面积可以由调用area( )来获得。无论用到哪种图形的类型,该操作的接口是相同的。

为什么要重载方法?方法重载如何应用?相关推荐

  1. 方法功能从无参方法、含参方法到重载方法

    时间紧张,先记一笔,后续优化与完善. 一.无参方法 a.无参方法法语: 访问修饰符> 返回类型 <方法名>(){ //方法的体主 } b.义定 什么是无参方法?所谓无参方法即形如,诸 ...

  2. 《.NET程序员面试秘笈》----面试题8 方法的重载和override有什么区别

    本节书摘来自异步社区<.NET程序员面试秘笈>一书中的第1章,面试题8,作者: 张云翯, 更多章节内容可以访问云栖社区"异步社区"公众号查看. 面试题8 方法的重载和o ...

  3. 在java中方法重载的要求,Java方法的重载

    Java方法的重载 方法重载:在类中方法名称相同,但是形式参数不同 public class Demo15 { public static void main(String[] args) { int ...

  4. 【Groovy】Groovy 运算符重载 ( 运算符重载 | 运算符重载对应方法 )

    文章目录 一.运算符重载 二.运算符重载对应方法 三.完整代码示例 一.运算符重载 Groovy 类可以进行运算符重载 , 任何一个类都可以使用预定义的 运算符 进行运算 , 如 " + - ...

  5. Java中方法重载和方法重写的区别

    文章目录 1 Java中方法重载和方法重写的区别 1 Java中方法重载和方法重写的区别 主要区别如下: 方法重载: 在同一个类中 方法名相同 参数个数.顺序.类型不同 返回值类型.访问修饰符任意 方 ...

  6. php是否直接支持函数的重载,php函数重载的替代方法--伪重载详解

    对于弱类型语言来说,PHP函数重载,并不像一般的OOP那样.而弱类型本来就不区分,所以无法通过这些来实现.但是,可以通过下面的方法来实现简单的伪重载吧. 函数重载的替代方法-伪重载,下面看一个具体的实 ...

  7. C#基础知识整理:基础知识(5) 方法的重载

    老师都有讲课这个方法,一个老师先是在西部偏远山区,是站在教室里木头的黑板前讲课:过了几年表现好,调到了稍微好点的城市里,是坐在教室前用多媒体设备讲课:又过了几年考博士了,毕业后继续当老师,不过现在是躺 ...

  8. 构造方法和方法的重载。

    ---恢复内容开始--- 构造器,又称为构造方法.constructor 构造器用于构造该类的实例. 格式: [修饰符] 类名(形参列表){ //n条语句 } 是一种特殊的方法: 1.通过new关键字 ...

  9. 【JavaSE05】Java中方法与重载、递归

    1.方法的声明和调用 什么是方法?为什么需要方法?代码复用,方便软件升级 什么是方法? 具备特定功能的一段独立的代码段 标准的方法格式:(注意格式的顺序) 修饰符 返回值类型 方法名(参数类型 参数名 ...

  10. 多态的实现(重载,虚方法,抽象类,接口)

    1.前言 多态是指,在同一个方法中,由于参数不同而导致执行效果各异.多态的实现方式主要是通过函数.运算符重载,虚成员,以及抽象类实现和接口.下面的内容就详细介绍一下前三种多态的实现形式. 2.方法重载 ...

最新文章

  1. Python 元组的使用
  2. html如何制作查看更多横条,页面浏览量顶部横条显示代码-附“Js/Jquery获取网页屏幕可见区域高度”...
  3. Java-Web Servlet开发
  4. ssh 与 telnet 有何不同?_Secure Shell(SSH)介绍
  5. 日美“利刃”联合军演
  6. Centos7 中文乱码切换中英字符
  7. Akka并发编程——第五节:Actor模型(四) 停止Actor
  8. python中列表生成式strip_python之列表生成式
  9. 前后落差大用什么词语_【刺激】全国最长滑索!“白云飞索”全长1500米,落差200多米!...
  10. 阿里2015回顾面试招收学历(获得成功offer)
  11. 【精选】抽奖点名、随机抽奖PPT素材合集,年会、老师必备
  12. 电脑版微信网络连接已断开,解决方案
  13. java获取异常信息
  14. linux如何设置默认浏览器,如何从命令行设置默认浏览器?
  15. 程序猿想平稳度过35岁中年危机?不妨试着考个研
  16. 鹏哥手把手带我刷好题 · 编程练习 · II
  17. 室性心律失常影响因素分析
  18. CAD梦想画图中删除命令
  19. oracle 文本转数字,Oracle:需要将数值转换为文本并保留 - 已解决
  20. Cadence LDO capless 电路,包括版图,已通过lvs ,drc检查,个人流片过,包括偏置全电路

热门文章

  1. Sun Virtualbox说明文件的Bug
  2. [LeetCode] 342. Power of Four(位操作)
  3. python获取linux本机IP
  4. 51nod 平均数(二分+树状数组)
  5. [Tool] SourceTree初始化GitFlow遇到错误(git command not found)的解决方案
  6. Git基础教程(四)
  7. mysql创建外键失败_mysql创建外键错误
  8. python 投屏_这款神器,完美解决了手机投屏的问题
  9. mysql int 拼接_MySQL 修改int类型为bigint SQL语句拼接
  10. 网站能ping通 但是打不开_SEO网站建设的三要素:域名、空间、网站程序