教妹学Java(三十二):了解 Java 中的返回类型协变

简介: 教妹学Java(三十二):了解 Java 中的返回类型协变

三妹开学了,学的计算机软件编程。她学校离我家很近,坐公交车也就 10 站路的距离, 每逢周末她都会来找我,让我辅导她学习 Java。作为一名拥有十余年编程经验的程序员,再加上父母给我们的这份血缘关系,我觉得义不容辞。


“二哥,今天我们要学习的内容是‘返回类型协变(covariant return type)’,对吧?”看来三妹已经提前预习了我上次留给她的作业。


“是的,三妹。Java 1.5 之前,无法通过更改方法的返回类型来重写任何方法。 ”我面带着朴实无华的微笑回答着她,“但是从 Java 1.5 之后,如果方法的返回类型不是基本数据类型,子类就可以通过更改返回类型来达到方法重写的目的。”


----正儿八经的分割线,正文开始------------


来看下面这个例子。


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
class A{
    A get(){return this;}
}
public class B extends A{
    @Override
    B get() {
        return this;
    }
    void out() {
        System.out.println("返回类型协变");
    }
    public static void main(String[] args) {
        new B().get().out();
    }
}


程序输出结果如下所示:


返回类型协变


通过上面的例子可以看得到,A 类的 get() 返回类型是 A,B 类的 get() 方法返回类型是 B,B 类继承了 B 类,也就是说 get() 方法通过返回类型协变达到了方法重写的目的。


在学习方法重载(overloading)的时候,我们知道,不能通过更改方法的返回类型来完成方法重载,但 Java 却允许通过更改方法的返回类型来完成方法重写(overriding)。


“三妹,关于 Java 中的返回类型协变,我们暂且先学到这里吧。”我揉一揉犯困的双眼,疲惫地给三妹说。


“好的,二哥,我这就去练习去。”三妹似乎意犹未尽,这种学习状态真令我感到开心。


相关文章
|
2月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
9天前
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
23 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
1天前
|
存储 安全 Java
Java 数据结构类型总结
在 Java 中,常用的数据结构包括基础数据结构(如数组和字符串)、集合框架(如 Set、List 和 Map 接口的多种实现)、特殊数据结构(如栈、队列和双端队列)、链表(单链表、双链表和循环链表)以及图和树等。这些数据结构各有特点和适用场景,选择时需考虑性能、内存和操作需求。集合框架提供了丰富的接口和类,便于处理对象集合。
|
9天前
|
Java
java基础(10)数据类型中的整数类型
Java中的整数类型包括byte、short、int和long。整数字面值默认为int类型,加L表示long类型。整数字面值可以是十进制、八进制(0开头)或十六进制(0x开头)。小容量类型(如int)可自动转换为大容量类型(如long),但大容量转小容量需强制转换,可能导致精度损失。
21 2
|
12天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
2月前
|
Java
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
|
2月前
|
存储 Java 程序员
Java中对象几种类型的内存分配(JVM对象储存机制)
Java中对象几种类型的内存分配(JVM对象储存机制)
65 5
Java中对象几种类型的内存分配(JVM对象储存机制)
|
1月前
|
自然语言处理 算法 Java
Java如何判断两句话的相似度类型MySQL的match
【9月更文挑战第1天】Java如何判断两句话的相似度类型MySQL的match
20 2
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之dal层中的mapper数据源类型进行组织的问题如何解决
Java应用结构规范问题之dal层中的mapper数据源类型进行组织的问题如何解决
|
2月前
|
前端开发 Java 数据库
Java系列之 Long类型返回前端精度丢失
这篇文章讨论了Java后端实体类中Long类型数据在传递给前端时出现的精度丢失问题,并提供了通过在实体类字段上添加`@JsonSerialize(using = ToStringSerializer.class)`注解来确保精度的解决方法。
下一篇
无影云桌面