gpt4 book ai didi

java - 类型不匹配,无法从 ObjA 转换为 ObjB(扩展第一个)

转载 作者:行者123 更新时间:2023-12-01 07:58:14 25 4
gpt4 key购买 nike

让我解释一下:

package a.b.c.d;
public interface ObjA extends ObjFirst ...

然后

package e.f.g.h;
public interface ObjB extends a.b.c.d.ObjA ...

我有一个包 a.b.c.d 中的方法,它返回一个 ObjA,当我尝试将其隐式转换为 ObjB 时,它返回错误:

Type mismatch: cannot convert from a.b.c.d.ObjA to e.f.g.h.ObjB

我哪里错了?

最佳答案

您尝试做的事情称为“向下转型”,编译器不会让您隐式执行此操作。这是因为编译器不知道 ObjA 的实例是否也是 ObjB 的实例。

我们以此为例:

class Animal {
//...
}

class Dog extends Animal {
//...
}

class Cat extends Animal {
//...
}

is-an 动物 is-an 动物

所以你将能够做到:

Cat cat = new Cat();
Animal animal = c;

但是你将无法做到:

Animal animal = new Animal();
Cat cat = animal;

事实上,试着想一想。如果我告诉你“我有一只动物”,你怎么能确定它是一只猫?

如果你想向下转型,你必须明确地这样做:

/*
* Here myAnimal is an Animal. In order to cast,
* I **must** be sure that myAnimal is a cat.
*/
Cat cat = (Cat) myAnimal;

为了真正确定 myAnimalCat:

if(myAnimal instanceof Cat) {
Cat cat = (Cat) myAnimal;
// do whatever you need to do with that cat object
}

关于java - 类型不匹配,无法从 ObjA 转换为 ObjB(扩展第一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27521875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com