重写、重载方法的调用
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, 以下代码执行的结果显示是多少( )? public class Demo {class Super{ int flag=1;Super(){test();}void test(){System. ...
- 让程序员大跌眼镜的 重载方法的调用
我们在调用一个虚方法的时候,jvm会在适当的时候帮我们选择合适的方法版本,有的时候在编译期.有时是在运行时,这个方法版本的选择过程我们可以称之为[方法分派]. 举例: public class Hum ...
- JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。
接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...
- java decompiler 使用_是否有任何Java Decompiler可以正确地反编译对重载方法的调用?...
考虑这个(恕我直言)简单的例子: public class DecompilerTest { public static void main(String[] args) { Object s1 = ...
- 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)
27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...
- 手把手教我班小姐姐学java之方法重写与方法重载
方法重写 子类从父类中继承方法.有事,子类需要修改父类中定义的方法的实现,这就是方法重写. 重写的好处在于子类可以根据需要,定义特定于自己的行为. 在面向对象原则里,重写意味着可以重写任何现有方法.实 ...
- php方法重载方法重写_PHP面向对象之旅:方法覆盖
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重载. 当对父类的方法进行重写时,子类中的方法必须和父类中对应的方法具有相同的方法名称, ...
- 重写方法,重载方法,虚方法和抽象方法的使用
重写方法,重载方法,虚方法和抽象方法. 重写:指子类重新实现父类的某些方法,以实现一些新的功能.重写的关键字是override.并且重写的方法其签名是相同的. 重载:指允许类中具有相同函数名的方法,但 ...
- java多态实现示例,以及子类重写父类方法调用父类方法
多态 多态存在的三个必要条件:继承,重写,父类引用指向子类对象, 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则error:如果有,调用子类的同名方法. example: pack ...
最新文章
- php uncaught thrown,PHP异常详解
- 接口方法上的注解无法被@Aspect声明的切面拦截的原因分析
- 应用Rational 工具简化基于J2EE的项目(一)
- 学习笔记之15道简单算法题
- Social Engineering Data
- 定制10kV变压器感应雷直击雷击变压器加避雷器atp-emtp模型
- 数据挖掘导论课后习题答案-第三章
- 安卓硬件模拟大师_安卓虚拟大师 可以手机运行免root带xp框架模拟器
- AcWing 658. 一元二次方程公式
- epub 电子书文件如何使用浏览器打开
- 韩式多用动态图(甜蜜女孩)
- 漫谈程序员(十六)健康程序猿系列之健康体魄
- java获取时间的各种风格_Java8新特性之新日期API
- ios友盟错误_iOS 2017友盟错误统计及分析
- 字模c语言,[C/C++]字模的解析(视频)
- ATFX:美国9月PCE物价指数晚间发布,会出现意外吗?
- ssm高校学生档案信息管理系统 毕业设计- 附源码010936
- 手撕红黑树——C++高阶数据结构详解
- for example: not eligible for auto-proxying
- 用 Python 基于 pyecharts 对微信好友进行分析
热门文章
- LeetCode每日一题 116. 填充每个节点的下一个右侧节点指针
- Wannafly挑战赛17 - 求值2 (逆元 + 杨辉三角公式)
- 智能指针——unique_ptr
- ubuntu20.04安装mysql教程
- 8086汇编-实验6(微调)-小写转换大写
- android4.0 菜单,Android 4.0.4系统曝光 增新Power菜单
- 在php里面怎么做日期范围,如何在php中获得上周的日期范围?
- mysql省市县三级互动_mysql+ajax的省市县三级联动
- 总有个短信发来一行乱码_个别收到的短信乱码,有什么办法还原么。。。
- 解析JVM线程同步机制