Java中的抽象类初始化

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()

我目前正在准备AP计算机科学考试。我看到一些问题可能有一个抽象类,比如

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类中声明/重写的所有方法