我目前正在攻读AP计算机科学考试。我看到一些可能有抽象类的问题,比如
public abstract class ConstructionWorker {
public ConstructionWorker() {
// implimentation
}
// other methods
}
另一类如
public class Carpenter extends COnstructionWorker {
public Carpenter() {
super()
}
}
在这两件事之间初始化对象会有什么不同?
ConstructionWorker bob = new Carpenter();
Carpenter jane = new Carpenter();
答案 0 :(得分:3)
这是polymorphism的一个例子。在这两种情况下,您都构建了Carpenter
个实例,但在第一种情况下,您将其存储为ConstructionWorker
,这意味着您只能访问ConstructionWorker
成员通过它(除非你把它归还给Carpenter
)。
在幕后,他们仍然是Carpenter
个实例 - 您只是以ConstructionWorker
的身份访问其中一个。
答案 1 :(得分:0)
解决方案是,每个\1
都是Carpenter
的实例,但现在反过来,这意味着当您将Carpenter分配给ConstructionWorker时,您只能使用{{1}中声明的方法} .class。换句话说,你丢失了在Carpenter类中声明/覆盖的所有方法。