Java—对象可以存储其接口类型吗?
我知道,如果创建新的接口类型,可以存储实现该接口的对象,因为它们是相同的类型Java—对象可以存储其接口类型吗?,java,interface,Java,Interface,我知道,如果创建新的接口类型,可以存储实现该接口的对象,因为它们是相同的类型 然而,它是否反过来工作?假设您创建了一个新的类对象x,您能在其中存储实现该对象的接口吗?下面是一个简单快捷的答案。不能将父类强制转换为子类 换言之: ParentClass parent = new ChildClass(); // VALID ChildClass child = new ParentClass(); // INVALID 已经回答了主要问题,但为了完整起见,考虑到: interface Anima
然而,它是否反过来工作?假设您创建了一个新的类对象x,您能在其中存储实现该对象的接口吗?下面是一个简单快捷的答案。不能将父类强制转换为子类 换言之:
ParentClass parent = new ChildClass(); // VALID
ChildClass child = new ParentClass(); // INVALID
已经回答了主要问题,但为了完整起见,考虑到:
interface Animal {}
class Dog implements Animal {}
class Cat implements Animal {}
考虑到以下变量:
以下内容是有效的:
但是这些是无效的:
因为我们只知道animal1
引用的对象是动物,但我们不能保证它是猫
dog = animal1;
这里也发生了同样的情况,我们已经看到了一个例子,即
animal1
可以指定一只猫。换句话说,这是无效的,因为并非所有动物都是狗。不清楚“将其存储在界面中”的确切含义我的意思是用子类创建一个新对象,并将其设置为接口。您的意思是拥有一个SomeInterface
类型的引用,并将其分配给SomeClass实现SomeInterface
类型的变量?如果是这种情况,答案是否定的。我强烈建议您在描述中添加一个代码示例。这应该清楚:•从实现接口的两个类创建对象。将它们存储在名为a和b的适当类类型的变量中。创建一个类型为接口类型的变量。将其称为i。我们可以将a或b存储到i中吗?(是的)。我们可以把i存储到a或b中吗?(这是我的问题)不能创建接口类型的变量。您只能创建类类型的变量,可能是匿名类,但仍然是类类型。
animal1 = animal2; // since all animals are animals
animal1 = cat; // since all cats are animals
animal2 = cat; // since all cats are animals
animal1 = dog; // since all dogs are animals
animal2 = dog; // since all dogs are animals
cat = animal1;
dog = animal1;