import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;/*** 1.重载方法调用是在编译时决定的 * 2.重写的方法调用是在运行时决定的*/public class Test2 {public void classify(Set<?> s) {System.out.println("set");}public void classify(List<?> s) {System.out.println("list");}public void classify(Collection<?> s) {System.out.println("unknown");}public static void main(String[] args) {// 重载方法是在编译时决定的,所以编译时类型都是Collection,即调用的是第三个方法Collection<?>[] c = { new HashMap<String, String>().values(),new ArrayList<String>(), new HashSet<String>() };for (Collection<?> collection : c) {new Test2().classify(collection);}// 重写的方法调用是在运行时决定的,编译时都是Wine,但是在运行时Wine[] wines = { new Wine(), new Sparkling(), new Champagne() };for (Wine wine : wines) {wine.name();}}
}class Wine {void name() {System.out.println("wine");}
}class Sparkling extends Wine {void name() {System.out.println("Sparkling");}
}class Champagne extends Wine {void name() {System.out.println("Champagne");}
}

运行结果:

unknown
unknown
unknown
wine
Sparkling
Champagne

1.重载方法调用是在编译时决定的
2.重写的方法调用是在运行时决定的

解决上面重载和要预期的结果不同的问题:将重载的方法合并成为一个
public static void classify(Collection<?> s) {if(s instanceof Set<?>){System.out.println("set");}else if(s instanceof List<?>){System.out.println("list");}else{System.out.println("unknown");}}

 

转载于:https://www.cnblogs.com/sunny-go/p/3257310.html

重写、重载方法的调用相关推荐

  1. 子类重写父类方法,调用时会调用子类重写之后的方法

    1, 以下代码执行的结果显示是多少( )? public class Demo {class Super{ int flag=1;Super(){test();}void test(){System. ...

  2. 让程序员大跌眼镜的 重载方法的调用

    我们在调用一个虚方法的时候,jvm会在适当的时候帮我们选择合适的方法版本,有的时候在编译期.有时是在运行时,这个方法版本的选择过程我们可以称之为[方法分派]. 举例: public class Hum ...

  3. JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。

    接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...

  4. java decompiler 使用_是否有任何Java Decompiler可以正确地反编译对重载方法的调用?...

    考虑这个(恕我直言)简单的例子: public class DecompilerTest { public static void main(String[] args) { Object s1 = ...

  5. 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)

    27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...

  6. 手把手教我班小姐姐学java之方法重写与方法重载

    方法重写 子类从父类中继承方法.有事,子类需要修改父类中定义的方法的实现,这就是方法重写. 重写的好处在于子类可以根据需要,定义特定于自己的行为. 在面向对象原则里,重写意味着可以重写任何现有方法.实 ...

  7. php方法重载方法重写_PHP面向对象之旅:方法覆盖

    如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重载. 当对父类的方法进行重写时,子类中的方法必须和父类中对应的方法具有相同的方法名称, ...

  8. 重写方法,重载方法,虚方法和抽象方法的使用

    重写方法,重载方法,虚方法和抽象方法. 重写:指子类重新实现父类的某些方法,以实现一些新的功能.重写的关键字是override.并且重写的方法其签名是相同的. 重载:指允许类中具有相同函数名的方法,但 ...

  9. java多态实现示例,以及子类重写父类方法调用父类方法

    多态 多态存在的三个必要条件:继承,重写,父类引用指向子类对象, 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则error:如果有,调用子类的同名方法. example: pack ...

最新文章

  1. php uncaught thrown,PHP异常详解
  2. 接口方法上的注解无法被@Aspect声明的切面拦截的原因分析
  3. 应用Rational 工具简化基于J2EE的项目(一)
  4. 学习笔记之15道简单算法题
  5. Social Engineering Data
  6. 定制10kV变压器感应雷直击雷击变压器加避雷器atp-emtp模型
  7. 数据挖掘导论课后习题答案-第三章
  8. 安卓硬件模拟大师_安卓虚拟大师 可以手机运行免root带xp框架模拟器
  9. AcWing 658. 一元二次方程公式
  10. epub 电子书文件如何使用浏览器打开
  11. 韩式多用动态图(甜蜜女孩)
  12. 漫谈程序员(十六)健康程序猿系列之健康体魄
  13. java获取时间的各种风格_Java8新特性之新日期API
  14. ios友盟错误_iOS 2017友盟错误统计及分析
  15. 字模c语言,[C/C++]字模的解析(视频)
  16. ATFX:美国9月PCE物价指数晚间发布,会出现意外吗?
  17. ssm高校学生档案信息管理系统 毕业设计- 附源码010936
  18. 手撕红黑树——C++高阶数据结构详解
  19. for example: not eligible for auto-proxying
  20. 用 Python 基于 pyecharts 对微信好友进行分析

热门文章

  1. LeetCode每日一题 116. 填充每个节点的下一个右侧节点指针
  2. Wannafly挑战赛17 - 求值2 (逆元 + 杨辉三角公式)
  3. 智能指针——unique_ptr
  4. ubuntu20.04安装mysql教程
  5. 8086汇编-实验6(微调)-小写转换大写
  6. android4.0 菜单,Android 4.0.4系统曝光 增新Power菜单
  7. 在php里面怎么做日期范围,如何在php中获得上周的日期范围?
  8. mysql省市县三级互动_mysql+ajax的省市县三级联动
  9. 总有个短信发来一行乱码_个别收到的短信乱码,有什么办法还原么。。。
  10. 解析JVM线程同步机制