Java中的抽象类初始化

时间:2018-04-09 15:13:15

标签: java class oop abstract-class

我目前正在攻读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();

2 个答案:

答案 0 :(得分:3)

这是polymorphism的一个例子。在这两种情况下,您都构建了Carpenter个实例,但在第一种情况下,您将其存储为ConstructionWorker,这意味着您只能访问ConstructionWorker成员通过它(除非你把它归还给Carpenter)。

在幕后,他们仍然是Carpenter个实例 - 您只是以ConstructionWorker的身份访问其中一个。

答案 1 :(得分:0)

解决方案是,每个\1都是Carpenter的实例,但现在反过来,这意味着当您将Carpenter分配给ConstructionWorker时,您只能使用{{1}中声明的方法} .class。换句话说,你丢失了在Carpenter类中声明/覆盖的所有方法。