当前位置: 首页 > 编程笔记 >

Java中的协变返回类型

车峻熙
2023-03-14
本文向大家介绍Java中的协变返回类型,包括了Java中的协变返回类型的使用技巧和注意事项,需要的朋友参考一下

协变返回类型是指重写方法的返回类型。它允许缩小重写方法的返回类型,而无需强制转换类型或检查返回类型。协变返回类型仅适用于非原始返回类型。

从Java 5开始,仅通过遵守返回类型是重写的方法返回类型的子类的条件,就可以通过更改其返回类型来覆盖方法

示例

以下示例展示了相同的内容。

class SuperClass {
   SuperClass get() {
      System.out.println("SuperClass");
      return this;
   }
}

public class Tester extends SuperClass {
   Tester get() {
      System.out.println("SubClass");
      return this;
   }

   public static void main(String[] args) {
      SuperClass tester = new Tester();
      tester.get();
   }
}

输出结果

Subclass
 类似资料:
  • 这将无法编译,因为编译器只能保证是的某个子类,但不能保证的每个子类都将重写以返回自身的数组,就像我碰巧对所做的那样,因此Java只知道返回而不是。 我如何保证每个子类都用一个协变返回类型重写,以便我可以将它与泛型一起使用?

  • 问题内容: Java中的协变返回类型是什么?在一般的面向对象编程中? 问题答案: 协变返回,意味着当一个方法被覆盖时,覆盖方法的返回类型被允许为覆盖方法的返回类型的子类型。 为了举例说明,通常情况是-声明为返回类型。你可以在自己的类中重写此方法,如下所示: 这样做的好处是,任何持有对MyFoo对象的显式引用的方法都将能够调用clone()并知道(无需强制转换)返回值是的实例。如果没有协变量返回类型

  • 我为协变返回类型的继承创建了一个小示例。基本上有三种不同的类别: 主应用程序: BaseManager: 鸟经理: 当我重写方法以返回时,为什么我需要将类型转换为? 我使用过的重写方法在返回类型上会有所不同吗?作为参考。 编辑: 我有不同的子模型,它们都继承自。所有模型都允许存在一次。我尝试将这些模型添加到列表中,而不是对每个模型使用单例。使用,我想得到实际的模型。也许我得考虑太多了。

  • 问题内容: 从Java 5开始,我们被允许具有协变返回类型。Java API为什么不利用此优势? 举个例子。为什么不重写以返回对象?在我看来,它将在所有情况下都向后兼容。 问题答案: 通常,这确实是为了保持向后兼容性。请注意,兼容性也必须保持在字节码级别,并且更改返回类型也会更改字节码。因此,通常来说,如果有任何子类可能覆盖了所讨论的方法,那么切换到协变返回类型将破坏这些类。 由于是抽象的,因此显

  • 就说,我问题的重点是学会理解jls。我相信jls中的一切都是真的。 考虑JLS下一个片段: 8.4.8.1。重写(通过实例方法) 在类C中声明的实例方法m1重写在类A中声明的另一个实例方法m2,前提是以下所有条件均为真: C是a的一个子类。 m1的签名是m2签名的子签名(§8.4.2)。 要么: m2是公共的、受保护的或在与C相同的包中声明具有默认访问权限的,或者 m1覆盖方法m3(m3不同于m1

  • 问题内容: 这是对问题的跟进:协议func返回Self。协议如下: 以下工作正常,但每个实现的功能完全相同,即 按照这个http://nshipster.com/swift-default-protocol- implementations/ 我尝试了一个全局功能 但是,在实现以下协议的类中调用它时 我得到指出的错误。当我键入自动完成显示为,我不知道那是什么意思。我也尝试过添加,但显然只允许这样做