如果我定义
class A {
public int a;
public float b;
public A() {
a = 10;
}
}
class B extends A {
public B() {
a = 2;
}
}
class C extends A {
public C() {
b = 2.0f;
}
}
在主要
public static void main(//...) {
A a = new A();
B b = new B();
C c = new C();
a = b; //error?
b = c; //this one too?
}
答案 0 :(得分:4)
我不确定第一个错误,看起来很好。您将来应该发布完全错误消息。您永远不应忽略错误消息,因为它们会告诉您问题的原因。第二个错误是显而易见的,它是类型不匹配:C
不是extends B
,因此您无法将C
的实例分配给声明为B
。要解决此问题,您应将其声明为C
,A
或Object
(因为它是所有类的隐式超类)。
此外,您的class C
无法编译,因为构造函数的名称为A()
而不是C()
,但这可能是一个copypaste错误;)