我正在学习一本AP CS A考试的书,特别是Barron的考试准备书.
这本书中有一节是指两个班,Student和GradStudent其中GradStudent extends Student.
GradStudent有方法getId()而Student不是.
如果我要运行以下代码:
Student s = new GradStudent()
s.getId()
Run Code Online (Sandbox Code Playgroud)
这本书告诉我,我会收到一个错误.为什么是这样?由于我将其初始化为a GradStudent,无法s访问该方法getId()?
本质上,如果我将变量声明为超类,并将其初始化为子类,会发生什么?
换句话说,如何做到s与g下面的示例有所不同:
Student s = new GradStudent()
GradStudent g = new GradStudent()
Run Code Online (Sandbox Code Playgroud)
编辑:
我现在明白s只能访问Student类中的方法.那么如果我执行以下操作会发生什么:
Student s = (new GradStudent().setId(1) )
Run Code Online (Sandbox Code Playgroud)
这个id领域会发生什么?(假设它只是存在于GradStudent类)如果我铸造s到GradStudent再次,会是能够访问相同的id?