[英]type mismatch in java?
我有以下代码:
public class AClass {
public AClass() {
System.out.println("Constructor A");
}
}
public class BClass extends AClass{
public BClass(){
System.out.println("Constructor B");
}
}
public class Test {
public static void main(String[] args) {
BClass b = new BClass();
}
}
我更改了代码,如下所示:
public class AClass {
public AClass() {
System.out.println("Constructor A");
}
}
public class BClass extends AClass{
public BClass(){
System.out.println("Constructor B");
}
}
public class Test {
public static void main(String[] args) {
BClass b = new AClass();
}
}
在第二个代码段中,我收到此更改的类型不匹配错误BClass b = new AClass();
。
我正在学习Java,我想了解错误的更深层含义,并且想知道第二个代码段中的错误原因。
说你说; 狗是一种动物,例如
class Animal { }
class Dog extends Animal {
public void bark() { }
}
class Cat extends Animal {
public void meow() { }
}
Animal a = new Dog(); // is ok.
但是你不能说; 动物是狗的一种。
Dog d = new Animal(); // not ok.
d.bark(); // Animal doesn't have a bark();
您可以执行AClass b = new BClass();
但不是BClass b = new AClass();
因为仅AClass
是AClass
的父BClass
。 在多态中,这是不允许的。
尝试AClass a = new BClass();
代替。
如果S是T的子类型,则可以将T类型的对象替换为S类型的对象
在您的示例中,这意味着可以将类型A的对象替换为类型B的对象。您正尝试采用另一种方法。 原理的意思是,当您说B是A的亚型时,您可以将B的所有实例都当作A对待。例如,可以将所有狗当作哺乳动物对待。
您的示例要尝试做的是创建哺乳动物并将其像狗一样对待。
您正在尝试执行downcasting
。 要使此代码有效,只需使用以下代码更改代码:
public class AClass {
public AClass() {
System.out.println("Constructor A");
}
}
public class BClass extends AClass{
public BClass(){
System.out.println("Constructor B");
}
}
public class Test {
public static void main(String[] args) {
AClass b = new BClass();
doDownCasting(b);
}
private static void doDownCasting(AClass a){
if(a instance of BClass){
BClass bClass = (BClass)a; // do the downcasting here
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.