要理解多态,就必须有一个大的理解方向,不然很容易绕进去。

首先知道多态的释义:多态性是指一个名词可以有多种语义。

  对于java的多态性学习者来说,就是必须要知道多个同名方法在不同情况下的使用规则。

  java的同名方法只能通过两种机制实现。覆盖和重载。(覆盖一般出现在继承中,子类覆盖父类,而重载一般出现在同一个类中,参数不同的同名方法,c++中也有)

  先探讨重载。

  一、我们知道重载需要参数不同,那么不同体现在哪里?

  1、参数的个数

  2、参数的类型不同

  3、参数的位置(这已经包含在上述两者之中)

  下面分别体现参数的个数,类型不同引起的重载

  

public class TestOverload_1 {
public void showMsg() {
System.out.println("a method without parameter");
}
public void showMsg(int k) {//这是对方法的重载
System.out.println("a method parameter with k , k = "+k);
}
public static void main(String args[]) {
TestOverload_1 oa =new TestOverload_1();
oa.showMsg();
oa.showMsg(100);
}
}
public class TestOverload_2 {
public void showMsg(char ch) {
System.out.println("a method with character parameter ch,ch= "+ch);
}
public void showMsg(int k) {
System.out.println("a method with integer parameter k,k= "+k);
}
public static void main(String args[]) {
TestOverload_2 oa = new TestOverload_2();
oa.showMsg('a');
oa.showMsg(3);
}
}

注意:对于静态和普通实例方法的重载是一致的,它们之间也可以相互重载,同理构造方法也能进行重载。,修饰符没有任何限制。

二、关于重载的编译解析原理过程大概如下:

先根据调用的方法名查找是否有该方法--------->比较形参与实参数目,如多个符合,进入候选集---------->从候选集中比较类型是否匹配,如有多个匹配,进入可行集------->查找最佳匹配,如同时存在形参为int 型 与double型方法,选择转换较少的,若转换相同,则报错

源码如下:

public class Matching {
public void show(int a,int b,int c) {
System.out.println("1---a="+a+",b="+b+",c="+c);
}
public void show(int a,int b,double c) {
System.out.println("2---a="+a+",b="+b+",c="+c);
}
public void show(int a,double b,double c) {
System.out.println("3---a="+a+",b="+b+",c="+c);
}
public void show(double a,double b, int c) {
System.out.println("4---a="+a+",b="+b+",c="+c);
}
public void call() {
show(1, 2, 3);//匹配第一个
// show(1.0, 2.0, 3.0);//没有一个可行的方法
show(1.0, 2, 3);//最佳匹配第四个
// show(1, 2.0, 3);//三,四匹配,但没有最佳,所以不通过
show(1, 2, 3.0f);//匹配第二个 }
}

好了,以上就是关于java多态在重载时的一些规则与原理。关于覆盖的规则与理解在这一篇文章中。

关于java多态的理解的更多相关文章

  1. Java经验杂谈(2.对Java多态的理解)

    多态是面向对象的重要特性之一,我试着用最简单的方式解释Java多态: 要正确理解多态,我们需要明确如下概念:・定义类型和实际类型・重载和重写・编译和运行 其中实际类型为new关键字后面的类型. 重载发 ...

  2. 对java多态的理解

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new C ...

  3. Java多态-如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new ...

  4. 考考你对java多态的理解

    请看如下代码, 如果你能不运行得出正确答案, 那你真的超过99%的java程序员了. [本人属于最大头的那部分] public class A{ public String s = "A&q ...

  5. java多态的理解

    面向对象语言中的类有三个特征,封装.继承.多态.封装与继承很好理解,那什么是多态呢? 1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同 ...

  6. java多态的理解----部分非原创

    所谓多态,其实就是对于同一件事情,不同的对象要采取不同的行为,或者同一个对象在不同的情况下需要采取不同的行为方式. 不同的对象要采取不同的行为: 这有两种实现方式:接口实现和子类重新父类方法.这两种实 ...

  7. java四大特性理解(封装继承多态抽象)

    封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...

  8. 深入理解java多态没有烤山药的存在,java就不香了吗?

    目录 1. 从吃烤山药重新认识多态 2. 多态前提条件[重点] 3. 多态的体现 4. 多态动态绑定与静态绑定 5. 多态特性的虚方法(virtual) 7. 向上转型 8. 向下转型 9. 向上向下 ...

  9. Java中的继承、封装、多态的理解

    Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extend ...

随机推荐

  1. Java经典编程题50道之四十八

    某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字, 再将第一位和第四位交换,第二位和第三位交换. public ...

  2. 轻松搭建Git服务器(Ubuntu)

    搭建Git服务器 在远程仓库节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业 ...

  3. 重温基础之-css盒模型

    所有html元素都可以看作盒子. css盒模型本质上是一个盒子,封装周围的html元素,它包括:外边距,边框,内边距和实际内容. 默认情况下,一个元素的总宽度计算方式: 总宽度=左外边距+左边框+左内 ...

  4. Android 文字过长TextView如何自动截断并显示成省略号

    当用TextView来显示标题的时候,如果标题内容过长的话,我们不希望其换行显示,这时候我们需要其自动截断,超过的部分显示成省略号. 如下图所示,标题过长,自动换行了,显示不是很好看. 这时候我们需要 ...

  5. PAT 1003. Emergency 单源最短路

    思路:定义表示到达i的最短路径数量,表示到达i的最短径,表示最短路径到达i的最多人数,表示从i到j的距离, 表示i点的人数.每次从u去更新某个节点v的时候,考虑两种情况: 1.,说明到达v新的最短路径 ...

  6. 理解 Git

    Git 如何保存文件 其它版本管理系统通常会保存所有文件及其历次提交的差异(diff / revision),通过 merge 原始文件与各阶段的差异就能获取任何版本的状态 而 Git 保存的是每一次 ...

  7. 叼叼叼,HTML5日期(Date)类型和文本(Text)类型互相转换

    <input placeholder="From" class="form-control" type="text" onfocus= ...

  8. canvas API总结

    从简单的基本图形,到复杂炫酷的动画,通过canvas元素获取的2D图形渲染上下文CanvasRenderingContext2D,能够使用丰富的API来进行图形绘制.这篇文章将会总结在之前的canva ...

  9. MySQL查看最大连接数和修改最大连接数

    MySQL查看最大连接数和修改最大连接数 1.查看最大连接数       show variables like '%max_connections%'; 2.修改最大连接数       set GL ...

  10. Java Web项目中缺少Java EE 6 Libraries怎么添加

    Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...