一道java面试题-方法静态分派
2014-07-08 11:05
169 查看
一道面试题,下面程序的输出是?
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!
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!
相关文章推荐
- 一道java面试题-方法静态分派
- 一道Java面试题,静态方法在Java中是一种非虚方法
- 一道Java面试题,静态方法在Java中是一种非虚方法 http://blog.csdn.net/time_hunter/article/details/9074107
- 多线程有几种实现方法?同步有几种实现方法?静态同步方法和非静态有何不同?—— Java经典面试题系列
- 一道面试题,java编写decode方法
- 【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
- 一道jAvA静态的面试题想到的
- 实践JAVA wait(), notify(),sleep方法--一道多线程的面试题
- 【Java面试题】16 静态代码块,main方法,构造代码块,构造方法
- Java多线程运行时,尽可能调用单例对象、工具类和静态方法,这样可以减少内存的占用量
- java中用静态方法返回类名
- JAVA静态代码块,静态方法,非静态方法 简单比较!~
- 求解一道Java面试题。
- 一道JAVA编程面试题
- 一道JAVA编程面试题
- java类中包含静态成员、方法时的打印顺序
- java中静态代码块 静态方法
- Java中静态方法返回类名
- google的一道JAVA面试题
- java 静态方法和静态变量 static