当前位置: 首页 > 知识库问答 >
问题:

在Java多态性中,实现接口的所有类都可以创建为该类型接口吗?

方心思
2023-03-14

当我继续我的在线教程,我遇到了这一课。我有一个接口和两个实现该接口的类。

public interface Payable {
double getPaymentAmount();
}
    null
    public static void main(String[] args) {
    Payable[] payableObjects = new Payable[4];
    payableObjects[0] = new Invoice("0000", "abc", 1,2);
    payableObjects[1] = new SalariedEmployee("test", "user", "000-000", 35);
  • 这是因为所有的类都实现了接口Payve[]吗?
  • 如果接口是在顶层层次结构中定义的,那么是否总是可以创建实现该接口的所有类的对象?

共有1个答案

郤旭东
2023-03-14

你的问题标题不符合语法,但这个词的选择表明你对概念有微妙的误解。

您只能将一个类创建为那个类。也就是说,您不能编写New Payer,也不能期望创建任何InvoiceSalarieDemployee对象。

但是您可以将对Payer的引用指向任何实现Payer的对象。这几乎是亚型多态性的基本思想。

然后,代码创建两个对象并将它们分配给其中的两个引用。这就像数组元素是自变量一样。(几乎是,但差异是由于数组协方差,这在这一点上并不重要。)特别是,new运算符的结果在第一种情况下具有invoice类型,而不是vaide类型。可以将发票分配给应付引用,但转换是在分配时进行的,而不是在创建时进行的。

因此,从技术上讲,标题问题的答案是“不,对象总是按照在new表达式中指定的类型创建,但您可以在之后转换引用”。

 类似资料:
  • 问题内容: 在现实世界中,人们将其用于(解决什么类型的问题)?我可以看到其中的一些示例代码吗?我所能找到的只是关于猫和狗说话或喝牛奶或咖啡的人的代码… 人们真的通过接口实现多态吗?做什么的? 问题答案: 当然, 下面是“观察者”模式的具体示例,该模式在记录器系统中使用类和接口来实现多态行为: 然后,您可以按以下方式使用它: 希望这有助于您理解接口和多态性。

  • 问题内容: 例如下面的示例: DO 和两个满足,即使一个是一个指针,另一个是直接一个结构? 问题答案: 通过编译代码很容易得到答案: 该错误是基于以下规格要求: 接收器类型必须采用T或 T的形式,其中T是类型名称。用T表示的类型称为接收方基本类型; 它不能是指针或接口类型* ,并且必须在与方法相同的包中声明。 (强调我的) 声明: 声明一个 指针 类型,即 没有资格作为方法接收者。

  • 我读过很多解释接口和抽象类之间差异的文章;这些帖子特别有用:接口和抽象类之间有什么区别?接口与抽象类(通用面向对象);然而,我找不到任何具体解决我问题的答案。 上下文:今天在课堂上,我们编写了一个接口和两个实现接口的类: 我知道这是可能的,因为它有效;我的问题是它为什么有效?我知道子类与其超类有ISA关系,但接口根本不是类,那么继承仍然适用于它们吗?实现多个接口的类是否与这些接口有ISA关系? 这

  • 问题内容: 我在编写的程序中遇到接口问题。我想创建一个接口,该接口的方法之一可以接收/返回对自己对象类型的引用。就像这样: 我不能在“?”处使用“ I”,因为我不想返回对接口的引用,而是要返回对类的引用。我搜索后发现在Java中没有“自我引用”的方法,因此我不能仅用“?”代替。在示例中,“ self”关键字或类似的内容。实际上,我想出了一个解决方案 但这似乎确实是一种解决方法或类似方法。还有另一种

  • 本文向大家介绍接口可以在Java中扩展多个接口吗?,包括了接口可以在Java中扩展多个接口吗?的使用技巧和注意事项,需要的朋友参考一下 是的,我们可以做到。一个接口可以扩展Java中的多个接口。 例: 输出:

  • 问题内容: 考虑以下类层次结构: 众所周知,子类与其超类之间存在关系(is-a)。 问:有没有像“是一个”之间的任何关系和? 好的答案,但是您说过“ is-a”也是和之间的关系, 但是 “ is-a”是 类 之间的关系,并且接口不是类! 问题答案: 是。关系是完全一样的 书也是应税的。 编辑 接口是与Java的关键字(可能是C#我不知道)匹配的工件。 在OO接口中,类是“提交”的一组操作,仅此而已