文档章节

I'm not me? —— 多态的另一个例子

Iridium
 Iridium
发布于 2018/11/25 15:56
字数 333
阅读 74
收藏 0

按:我感觉我出了一个还不错的面试题~

代码如下:

SuperClass.java

public class SuperClass {
    int a = 3;

    public int getA() {
        return a;
    }
}

SubClass.java

public class SubClass extends SuperClass{
    int a = 4;

    @Override
    public int getA() {
        return a;
    }
}

Client.java

public class Client {
    public static void main(String[] args) {
        SuperClass s = new SubClass(); //!!! s 的编译时类型是 SuperClass, 运行时类型是 SubClass
        System.out.println(s.a); // 3
        System.out.println(s.getA()); // 4
        System.out.println(s.a != s.getA()); // true
    }
}

Client 的几个输出语句的输出结果写在代码注释中了。其中,需要特别注意的是: s.a != s.getA()true! 这个初看有点让人不解,s.a 怎么会不等于自身?(I'm not me?) 出现这个情况,正是**多态(Polymorphism)**的限定所决定的:

  • 对象的方法具有多态性,所以 s.getA() 访问的是子类 SubClass 的方法 getA().
  • 对象的域(field)不具有多态性。s.a 访问的是父类 SupperClassa, 为3.
  • 通过对象的方法访问对象的变量,它使变量_间接_地有了多态性. SubClass.getA() 中访问的是 SubClass 的实例的变量 a, 所以为4.

PS: 刚刚写了个多态的例子,想了下,觉得比较麻烦,罗嗦,就改了一个简化版如上。

© 著作权归作者所有

共有 人打赏支持
Iridium
粉丝 3
博文 9
码字总数 4676
作品 0
成都
架构师
私信 提问
加载中

评论(2)

qwweeezhengwei
qwweeezhengwei

引用来自“黄海彬”的评论

不错
1
黄海彬
黄海彬
不错
Android源码设计模式解析与实战(一)

结合Android源码和图片加载的例子,介绍设计模式的同时,在例子中实际运用,更易于读者对设计模式的理解和使用。 本篇博客结合书中图片加载的例子和自己对知识点的理解,侧重记录下设计模式的...

xingjm8511
2016/12/19
278
0
AC(Aho—Corasiek) 多模式匹配算法

简介: AC多模式匹配算法产生于1975年的贝尔实验室,最早使用于图书馆的书目查询程序中。该算法以有限状态自动机(FSA),以及KMP前缀算法 为基础.(有说法: ac自动机是KMP的多串形式,是一个有限...

famince
2014/01/27
0
1
C++多态技术

C++多态技术 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是 “一种将不同的特殊行为和单个泛化记号相关联的...

扬名立万
2014/07/24
57
0
深入浅出话多态(上)——具体而微

小序 前几天写了一篇《深入浅出话委托》,很多兄弟姐妹发Mail说还算凑合,又有兄弟说能不能写一篇类似的文章,讲解一下什么是“多态”。一般情况下我写文章都是出于有感而发:一来做个思考的...

余二五
2017/11/15
0
0
C中的继承和多态

2010-09-23 00:27 by 吴秦,19167 阅读,23 评论,收藏,编辑 1、引言 继承和多态是面向对象语言最强大的功能。有了继承和多态,我们可以完成代码重用。在C中有许多技巧可以实现多态。本文的目的...

老朱教授
2017/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vert.x系列(二)--EventBusImpl源码分析

前言:Vert.x 实现了2种完成不同的eventBus: EventBusImpl(A local event bus implementation)和 它的子类 ClusteredEventBus(An event bus implementation that clusters with other Ve......

冷基
今天
1
0
Perl - 获取文件项目

参考:http://www.runoob.com/perl/perl-directories.html 下面返回JSON格式的文件列表 #!/usr/bin/perluse strict;use warnings;use utf8;use feature ':5.26';require Fi......

wffger
昨天
2
0
vue组件系列3、查询下载

直接源码,虽然样式样式不好看,逻辑也不是最优,但是可以留作纪念。毕竟以后类似的功能只需要优化就可以了,不用每次都重头开始。。。 <template> <div class="pre_upload"> <div ...

轻轻的往前走
昨天
2
0
java浅复制和深复制

之前写了数组的复制,所以这里继续总结一下浅复制和深复制。 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。 深拷贝:对基本数据类型进行值传递,对引用数据类型,...

woshixin
昨天
2
0
kubernetes 二进制包安装

环境 角色 主机名 内网 IP 集群 IP 操作系统 服务 执行目录 部署机 k8s-master master120 10.0.4.120 - CentOS kube-apiserver kube-scheduler kube-controller-manager /opt/kubernetes/ et......

Colben
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部