文档章节

Who am I? —— Java 多态特性一例

Iridium
 Iridium
发布于 2018/11/25 15:27
字数 354
阅读 10
收藏 0

测试代码如下:

SuperClass.java

public class SuperClass {
    public String a = "from super class";

    public void hello() {
        System.out.println(a);
    }
}

SubClass.java

public class SubClass extends SuperClass {
    public int a = 3;

    @Override
    public void hello() {
        System.out.println(a);
    }
}

Client.java

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

上面的代码中,SubClass 覆盖了SuperClass 的 field a and its method hello(). Client 的输出结果会是什么呢?

运行代码,得如下结果:

3
from super class

由此可见,

  • s.hello() 执行了 SubClass.hello() 方法
  • s.a 访问了 SuperClass.a.

初看让人不解,这个 s访问的内容,SubClass 中都有定义,但为何 SubClass 还是 SuperClass 都被它调用了呢?即SubClass 里也有定义 as.a 仍然用 SuperClassa. 在 SubClass.hello() 使用的 a 是哪个类中定义的?

这是因为多态有如下一些限定:

  1. 对象的实例变量不具有多态性。具备多态性的,只有实例的方法。所以访问实例变量,依据其编译时类型访问。
  2. SubClass.hello() 使用的 a 是哪个类 SubClass 中定义的。虽然依据第1条的说明,实例变量不具有多态性,但如果通过子类的方法去访问(如通过 SubClass.hello()),它依然可以被访问到,只不过不那么直接罢了。

© 著作权归作者所有

共有 人打赏支持
Iridium
粉丝 3
博文 9
码字总数 4676
作品 0
成都
架构师
私信 提问
编程思想 之「多态、初始化顺序、协变返回类型」

版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/78948806 温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,...

维C果糖
2018/01/02
0
0
悲观的并发策略——synchronized互斥锁

互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它保证共享数据同一时刻只能被一条线程使用,其他线程只有等到锁释放后才能重新进行竞争。 对于Java开发人员,...

wangyangzhizhou
2018/04/16
0
0
编程思想 Java中对象的本质

Bruce Eckel 前辈写的《Java编程思想》把问题探讨得非常深入,非常建议同行都学习一下。学习 Java 语言时,老师告诉你 What,自己练习知道 How ,Bruce Eckel 告诉你Why 。 之前已经把后面的...

木云凌
2016/02/23
0
0
java 7 入门书籍

一、Java从入门到精通 《Java从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识。 《Java从入门到精通(第3版...

modernizr
2014/05/15
6.9K
9
那些年,关于 Java 的那些事儿

版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/78695893 温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,...

维C果糖
2017/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

带你看数据挖掘与机器学习-厦大EDP上课出勤预测

带你看数据挖掘与机器学习-厦大EDP上课出勤预测 标签: 数据挖掘 特征工程 机器学习 出勤预测 write by xmhexi 2019/3/22 内容提要 首先说明本文是一篇科普文章,通过一个实际案例,帮助理解什...

xmhexi
今天
43
0
IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
今天
4
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
3
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
10
0
java多线程2

“非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在线程安全问题。这是因为方法内部的变量都是私有造成的。 synchronized 获取的都是对象锁。如果多个线程访问多个...

一滴水穿石
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部