一道java面试题-方法静态分派
2024-10-19 08:58:56
一道面试题,以下程序的输出是?
public class StaticDispatch {
static abstract class Human{
}
static class Man extends Human{
}
static class Woman extends Human{
}
public void sayHello(Human guy){
System.out.println("hello , guy!");
}
public void sayHello(Man guy){
System.out.println("hello, gentleman!");
}
public void sayHello(Woman guy){
System.out.println("hello, lady!");
} public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
StaticDispatch sd = new StaticDispatch();
sd.sayHello(man);
sd.sayHello(woman);
}
}
结果是
hello , guy!
hello , guy!
------------------------
对于 Human man = new Man();
上面代码中的“Human”称为 变量的静态类型(static type),或者叫做外观类型。后面的Man是实际类型。
变量本身的静态类型不会被改变,而且终于的静态类型在编译期可知的。而实际类型变化的结果在执行期才可确定。
我们能够对上面的代码做些改动
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
StaticDispatch sd = new StaticDispatch();
sd.sayHello((Man)man);
sd.sayHello((Woman)woman);
}
输出就变成了
hello, gentleman!
hello, lady!
最新文章
- Hilbert-Huang Transform(希尔伯特-黄变换)
- 如何在windows上编译Chromium (CEF3) 并加入MP3支持(二)
- 网盘的选择,百度网盘、google drive 还是 Dropbox
- curl的POST与GET方法
- berkeley db replica机制 - 主从同步
- 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题
- C# winFrom 制作、打包、签名、发布Activex全过程
- Java之字符串学习
- GPS功能:百度路书自定义【轨迹回放】
- ASP.NET获取IP的6种方法 【转】
- Java 四种线程池的使用
- linux ip 转发设置 ip_forward
- 在linux 上安装ansible
- C# 程序修改config文件后,不重启程序刷新配置ConfigurationManager
- springBoot(9)---定时任务,异步任务
- Hdoj 1115.Lifting the Stone 题解
- Java 模拟面试题
- 安卓自动化测试——rf
- SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别[转]
- 2018-03-17 handler学习使用