/**
* Description:
* 基类的引用变量可以只想基类的实例对象也可指向其子类的事来对象
* 接口的引用变量也可以指向实现类的实例对象
* 程序调用的方法在运行期才动态绑定
* 绑定指将一个对象调用和一个方法主体连接到一起,就是引用变量所指向的具体实例对象的方法,就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法
* 这种动态绑定实现了多态。只有方法有多条的概念
*/
public class Test {
/**
* 首先new Sub()的时候会首先调用Base的构造方法。
* 在Base的构造方法中会调用print方法,按照上述多态的特性
* 此时实例化的是Sub类的对象,所以实际会调用Sub类中的print方法。
* 此时Sub类中的非静态变量 int num = 3; 尚未执行,所以输出 Sub.num=0;
* 然后父类把在构造器中把num赋值为2
* 然后调用子类的构造方法
* 由初始化顺序:Sub中的非静态变量num初始化为3
* 然后调用子类的print方法输出Son.num=3
* 接着输出b.num
* 而属性是没有多态概念的, 所以会输出2
* @param args
*/
public static void main(String[] args) {
Base b = new Sub();
System.out.println(b.num);
}
} class Base {
int num = 1;
public Base() {
this.print();
num = 2;
}
public void print() {
System.out.println("Base.num = " + num);
} } class Sub extends Base {
int num = 3;
public Sub() {
this.print();
num = 4;
}
public void print() {
System.out.println("Sub.num = " + num);
}
}

Java代码执行顺序及多态体现的更多相关文章

  1. Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序

    //据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...

  2. java代码执行顺序

    class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println(&quo ...

  3. Java中父类和子类代码执行顺序

    执行顺序:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法 当父类或子类中有多个静态方法时按在代码中的顺序执行 pack ...

  4. final、static、代码块、静态代码块、内部类、代码执行顺序

    final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上               ...

  5. 详解JavaScript的任务、微任务、队列以及代码执行顺序

    摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("scrip ...

  6. 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

    编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...

  7. [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序

    本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...

  8. [js]js代码执行顺序/全局&私有变量/作用域链/闭包

    js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...

  9. 浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序

    本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析 ...

随机推荐

  1. learning armbian steps(10) ----- armbian 源码分析(五)

    在上一节的分析当中,已经知道了uboot kernel的源代码路径及编译选项,以及rootfs的版本,相关信息如下所示: ## BUILD CONFIGURATION Build target: Bo ...

  2. [SCOI2009]windy数 代码 (对应数位dp入门)

    Code1 (DP版) #include<bits/stdc++.h> #define in(i) (i=read()) using namespace std; int read() { ...

  3. JVM之Java类加载机制

    什么是类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这既是虚拟机的类加载机制 类的生命周期 生命周期简述 ...

  4. Python - 工具:将大图切片成小图,将小图组合成大图

    训练keras时遇到了一个问题,就是内存不足,将 .fit 改成 .fit_generator以后还是放不下一张图(我的图片是8192×8192的大图==64M).于是解决方法是将大图切成小图,把小图 ...

  5. linux安装mysql以及修改密码和重启mysql等相关命令

    Linux/UNIX 上安装 MySQL Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: MySQL - MySQL服务器.你需要该选项,除非你只想连 ...

  6. TCP层close系统调用的实现分析

    在调用close系统调用关闭套接字时,如果套接字引用计数已经归零,则需继续向上层调用其close实现,tcp为tcp_close:本文仅介绍tcp部分,前置部分请参考本博关于close系统调用的文章: ...

  7. link和Import区别

    本篇文章重点: link引用CSS时,在页面载入时同时加载: import需要页面完全载入后加载: link支持使用javascript控制DOM去改变样式,而Import不支持 下面待我娓娓道来: ...

  8. 修改PostgreSQL数据库的默认用户postgres的密码 并新建用户

    1.忘记了postgresql 安装时默认用户postgres 的密码,怎么办呢? linux shell命令下面输入: sudo -u postgres psql  (这样就可以直接登录进postg ...

  9. 一、基础篇--1.2Java集合-HashMap死循环问题

    为什么HashMap会出现死循环 首先,我们知道java的HashMap不是线程安全的.多线程下应该使用ConcurrentHashMap. HashMap底层是基于动态数组和单向链表(JDK1.7, ...

  10. 排查python内存泄露中几个工具的使用

    本文主要介绍3个工具:pdb,objgraph,以及pympler. 1.pdb pdb是专门用于python代码调试,模仿gdb. 使用pdb可以查看堆栈,打印变量等. 这里介绍的是命令行下的pdb ...