【发布时间】:2019-11-21 12:51:38
【问题描述】:
我是 java 和面向对象编程的新手,遇到了一个我找不到答案的问题:
打字时:
Base someDerive = new Derived(2.2);
java 基本上创建了一个实际上是 Base 类型的对象
我写了 Derived 而不是 Base(对于类类型),并且一切都按预期工作 - 但又一次 - 我假设如果类型 Base 指向 Derived,那么它应该作为派生工作。
说够了 - 一些代码的时间:
public class test{
public static void main(String args[])
{
Base someDerive = new Derived(2.2);
System.out.println(someDerive);
System.out.println(someDerive.baseField);
System.out.println(someDerive.baseString);
System.out.println(someDerive.derivedDouble);
}}
class Base{
int baseField;
String baseString;
Base(int field, String str) {
baseField = field;
baseString = str;
}
}
class Derived extends Base{
double derivedDouble;
Derived(double someDouble) {
super(10, "some_string");
derivedDouble = someDouble;
}
}
我期待打印输出,例如: “10” “一些字符串” “2.2”
我得到了一个编译错误:
Test.java:8: 错误:找不到符号 System.out.println(someDerive.derivedDouble); ^ 符号:变量derivedDouble 位置:变量 someDerive 类型为 Base 1 个错误
【问题讨论】:
-
感谢 azurefrog 极快的回复。我认为 Base 可以指向 Derived 而不会更改其值。这不是我们扩展课程的重点吗?这样 Base 可以引用 Derived 而 Derived 保留其功能?
标签: java