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;