多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。  

  java中的复用类是java中重要的一个概念,可以支持java多态的实现,在复用中我有时会将重载和重写这两个概念搞混了,现记录下。参考http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html。

一:方法重载

  方法重载是让类统一处理不同类型数据的一种机制,重载可以让同一名字的函数具有不同的参数类型以及个数,调用他们可以通过传递不同参数类型和参数个数来区别,注意方法参数列表中参数的顺序不同也一样可以区分不同方法,但是JAVA中不建议这么做。而且重载的返回类型可以相同也可以不同,但是注意JAVA无法通过不同的返回类型来区别不同的函数,因此返回类型不同不能进行重载。像我另外一篇随记中所述的this用法,不同构造器中,参数不同也能进行重载,如下代码中,构造函数具有不同参数。

而重载的规则:

1、必须具有不同的参数列表;

2、可以有不责骂的返回类型,只要参数列表不同就可以了;

3、可以有不同的访问修饰符;

4、可以抛出不同的异常;

package test;public class TestThis {
int count = 0;
String s = "initial value";
TestThis(int petals) {// TODO Auto-generated constructor stubcount = petals;System.out.println("Constructor int only,count="+petals);
}
TestThis(String ss) {// TODO Auto-generated constructor stubSystem.out.println("Constructor String only,s="+ss);
}
TestThis(String s,int petals) {// TODO Auto-generated constructor stubthis(petals);this.s=s;System.out.println("int & String");
}
TestThis() {// TODO Auto-generated constructor stubthis("hi", 11);System.out.println("default");
}
void printPetalCount(){System.out.println("count= "+count+" s="+s);
}public static void main(String[] args) {// TODO Auto-generated method stub
TestThis x = new TestThis();
x.printPetalCount();}}

二:重写

  重写又叫覆盖,指的是导出类修改基类的方法,或者子类需要修改父类的方法,得到不同结果。

重写方法的规则

1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。

2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

3、访问修饰符的限制一定要大于等于被重写方法的访问修饰符(public>protected>default>private)。

4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:

父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

  

重写与重载的区别在于:

重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。

用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.

转载于:https://www.cnblogs.com/vimzhu/p/6048237.html

JAVA学习笔记之复用类之重载和重写相关推荐

  1. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  2. Java学习笔记Day06 工具类及常用算法

    第六章 工具类及常用算法 文章目录 第六章 工具类及常用算法 Java语言基础类 Java基础类库 Object类 概述 toString方法 方法摘要 覆盖重写 equals方法 方法摘要 默认地址 ...

  3. 【Java学习笔记一】类和对象

    面向对象程序设计的一个一个重要特点是:封装性. 这里的封装性有两方面含义:一是将有关的数据和操作代码封装在一个对象中形成一个基本单位,各个对象之间相互独立互不干扰,二是将对象中某些部分对外隐蔽,即隐蔽 ...

  4. Java学习笔记2——常用类

    目录 1 内部类 1.1 成员内部类 1.2 静态内部类 1.3 局部内部类 1.4 匿名内部类 2 Object类 2.1 getClass()方法 2.2 hashCode()方法 2.3 toS ...

  5. 21天学通Java学习笔记-Day11(常用类)

    java 常用类(重点): String 类: String 类代表字符串.创建以后不能更变. public class tests { public static void main(String[ ...

  6. Java学习笔记:匿名类

    匿名类就是一个子类,由于无名可用,所以不能用匿名类声明对象,却可以直接使用匿名类创建对象. Output.java package NotNameClass; abstract class Outpu ...

  7. Java学习笔记之Pattern类的用法详解(正则表达式)

    转自:https://www.cnblogs.com/sparkbj/articles/6207103.html EG: //验证邮箱 public static final String REGEX ...

  8. java学习笔记——第八章 类和方法(二)

    8.4使用方法 java中的方法不能独立存在,他必须属于一个类或者一个对象,因此方法也不能像函数那样被独立执行.因此必须使用类或对象来调用. 总结: 方法不能独立定义,方法只能在类体中定义. 逻辑上讲 ...

  9. Java学习笔记day7——枚举类练习、包装类、抽象类、接口

    1. 枚举类的常用方法 (1)String name():返回枚举常量对象名称 (2)int ordinal():返回常量对象的下标 (3)String toString():Enum父类又重写了Ob ...

  10. java学习笔记(十)----String类和StringBuffer类

    ***String类和StringBuffer类 -------------------------- String类对象中的内容一旦被初始化就不能再改变 StringBuffer类用于封装内容可以改 ...

最新文章

  1. Linux下安装搜狗拼音输入法
  2. spring boot整合spring5-webflux从0开始的实战及源码解析
  3. JDK1.1 JDK1.2 JDK1.3 JDK1.4 JDK1.5 JDK1.6 JDK1.7
  4. 安卓开发toolbar设置logo_Android之ToolBar的使用
  5. Android蓝牙A2dp profile的使用
  6. python remove函数_Python列表的remove方法的注意事项
  7. 张掖市职教中心计算机专业,张掖市职教中心参加2021年全市中等职业学校学生教师技能大赛成绩喜人...
  8. jquery学习之$(document).ready()
  9. Mac下Zookeeper安装及配置
  10. 第十七届全国大学生智能汽车竞赛全国总决赛参赛队伍奖项公告
  11. EDEM颗粒堆积fluent meshing网格生成
  12. 计算机上的刷新快捷键,刷新快捷键是
  13. LaTeX 页眉设置
  14. Python基础教程
  15. 磁盘管理器显示状态良好 计算机不显示,win7系统打开磁盘管理显示显示状态良好(有危险)的解决方法...
  16. 如何写出好文案,不妨看看这篇(上)
  17. 刷手机流量,反正浪费就完事了
  18. 手机端网页技术--使自己做的asp.net网页适应手机浏览
  19. 欧拉(Euler)定理
  20. tanh () 函数

热门文章

  1. 头条的_signature这个如何_如何彻底防止反编译,dex加密怎么做
  2. C#进制转换(二进制转十进制 十进制转16进制等)
  3. Layui 表格table自定义每一列的样式
  4. vue.js 输入框金额限制
  5. PHP substr(),mb_substr(),mb_strcut()比较
  6. Matlab函数——randn
  7. QQ浏览器11版,中文输入法定位错误
  8. char*转换为jstring
  9. systemback慎用:安装后无法启动
  10. java bean规范 is_深入了解JavaBean规范中的属性名和setter/getter方法