【发布时间】:2015-05-31 14:30:40
【问题描述】:
import javax.swing.*;
public class Toast {
static Object[] objects = { new JButton(),
new String("Example"), new Object() };
public static void main(String[] args) {
System.out.println( new Count(objects) );
for (Object o : objects)
System.out.println(o);
}
}
class Count {
int b, s, o;
public Count(Object[] objects) {
for (int i=0; i<objects.length; i++)
count(objects[i]);
}
public void count(JButton x) { b++; }
public void count(String x) { s++; }
public void count(Object x) { o++; }
public String toString() {
return b + " : " + s + " : " + o + "\n";
}
}
上面是一段代码,它以某种形式出现在我即将进行的一项考试的过去试卷中。这个问题的想法是衡量你是否完全理解多态性、动态和静态转换。 OO的基本思想。
我想发表我认为正确的内容,如果人们能够纠正我或添加我将不胜感激的观点。
从我在上面的代码中可以看到:
项目向上转换为对象数组中的对象,因为 Java 中的每个类在技术上都从对象类继承。这就是为什么当 count 运行时它会说有 3 个对象而不是 1 个 Jbutton、1 个字符串和 1 个对象。
当增强的 for 循环运行时,该对象类型的 toString,例如来自对象的字符串和内存地址的示例(不确定 JButton 将打印什么)。由于这是在运行时完成的,因此这称为动态转换。
我看不到与上述代码相关的任何其他点。
【问题讨论】:
标签: java dynamic static polymorphism