Java中的抽象类初始化
我目前正在准备AP计算机科学考试。我看到一些问题可能有一个抽象类,比如Java中的抽象类初始化,java,class,oop,abstract-class,Java,Class,Oop,Abstract Class,我目前正在准备AP计算机科学考试。我看到一些问题可能有一个抽象类,比如 public abstract class ConstructionWorker { public ConstructionWorker() { // implimentation } // other methods } public class Carpenter extends COnstructionWorker { public Carpenter()
public abstract class ConstructionWorker {
public ConstructionWorker() {
// implimentation
}
// other methods
}
public class Carpenter extends COnstructionWorker {
public Carpenter() {
super()
}
}
还有另一类,比如
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();
这是一个很好的例子。在这两种情况下,您都在构造Carpenter
实例,但在第一种情况下,您将其存储为ConstructionWorker
,这意味着您只能通过它访问ConstructionWorker
成员(除非您将其转换回Carpenter
)
在引擎盖下,它们仍然都是Carpenter
实例-您只是以施工工人的身份访问其中一个实例。在这两种情况下,您都在构造Carpenter
实例,但在第一种情况下,您将其存储为ConstructionWorker
,这意味着您只能通过它访问ConstructionWorker
成员(除非您将其转换回Carpenter
)
在引擎盖下,他们仍然都是Carpenter
实例-你只是以ConstructionWorker
的身份访问其中一个实例。解决方案是,每个Carpenter
都是ConstructionWorker
的实例,但现在相反,这意味着当您将Carpenter分配给ConstructionWorker时,您只能使用ConstructionWorker
类中声明的方法。换句话说,您将丢失在Carpenter类中声明/重写的所有方法。解决方案是,每个Carpenter
都是ConstructionWorker
的一个实例,但现在反过来,这意味着当您将Carpenter分配给ConstructionWorker时,您只能使用ConstructionWorker
类中声明的方法。换句话说,您将丢失在Carpenter类中声明/重写的所有方法