zoukankan      html  css  js  c++  java
  • 协变返回类型

    一句话概括:

    子类覆盖父类方法,返回类型可以是,父类返回类型的子类。

    举例:

    class Processor {
        public String name() {
            return getClass().getSimpleName();
        }
        Object process(Object input) {
            return input;
        }
    }
    
    class Upcase extends Processor {
        String process(Object input) {
            return ((String) input).toUpperCase(); // 这里就是协变返回类型
        }
    }
    

    解释:基类Processor中process函数的返回类型是Object类型,是所有类的根类,所以Prossor的子类的返回类型可以是任意类型,当然包括这个字符串类型。

    补充:

    逆变与协变用来描述类型转换(type transformation)后的继承关系,其定义:如果A、B表示类型,f(⋅)表示类型转换,≤表示继承关系(比如,A≤B表示A是由B派生出来的子类)

    • f(⋅)是逆变(contravariant)的,当A≤B时有f(B)≤f(A)成立;
    • f(⋅)是协变(covariant)的,当A≤B时有f(A)≤f(B)成立;
    • f(⋅)是不变(invariant)的,当A≤B时上述两个式子均不成立,即f(A)与f(B)相互之间没有继承关系。

    这里的f(A)和f(B)可以粗浅地理解为一个函数的返回值(如有错误,欢迎指正)。

    参考:1、《Java编程思想》(第四版)2、https://www.jianshu.com/p/2bf15c5265c5

  • 相关阅读:
    python day01
    Mac上安装pexpect
    raid
    SSL证书制作
    linux grep命令详解
    第一轮迭代小组成员分数分配
    M1事后分析报告(Postmortem Report)
    软件发布说明
    测试报告
    week 9 scenario testing
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13627594.html
Copyright © 2011-2022 走看看