public class Father {
static {
System.out.println("Father静态块");
} {
System.out.println("Father构造块");
} public Father() {
System.out.println("Father构造函数");
} void func1() {
System.out.println("Father方法 1");
} public static void main(String[] args) {
Father father = new Son();
father.func1(); // 测试1
((Son) father).func2(); // 测试2
// father.func2(); // 测试3
} } class Son extends Father {
static{
System.out.println("Son静态块");
} {
System.out.println("Son构造块");
} public Son() {
System.out.println("Son构造函数");
} @Override
void func1() {
System.out.println("Son方法 1");
} void func2() {
System.out.println("Son方法 2");
} }

结果:

父类静态块 -> 子类静态块 -> 父类构造块 -> 父类构造函数 -> 子类构造块 -> 子类构造函数

在main方法中:

  测试1:father对象指向的是new 出来的Son对象,且Son对象继承Father对象并且重写(覆盖)了父类的func1() 方法,即这样的话,子类对象赋给父类对象,父类对象调用父类中被子类重写的方法时,实际是调用了子类中已经重写过的方法,即:

Father f = new Son();

f.func1();
Son s = new Son();

s.func1();

两者都是一样的,都是指向new 出来的Son 对象。

  测试2:因为father对象指向new 出来的Son 对象,所以可以将father对象强制转换成 Son对象,这样就可以调用 Son对象的func2()方法,因为两者在内存上就是一样的存在。

  测试3:错误,father对象不存在func2() 方法,只能强制转换成 Son对象,即可调用。

  

Java中继承时静态块,构造块,构造函数的执行顺序的更多相关文章

  1. 关于java中构造方法、实例初始化、静态初始化执行顺序

    在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...

  2. JAVA中继承时方法的重载(overload)与重写/覆写(override)

    JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就 ...

  3. 134、Java中的构造方法和构造块

    01.代码如下: package TIANPAN; class Book { public Book() { // 构造方法 System.out.println("[A]Book类的构造方 ...

  4. java中继承,子类是否继承父类的构造函数

    java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式) 下面来看例子: public class TestExtends { publi ...

  5. Java中继承,类的高级概念的知识点

    1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...

  6. [转载]Java中继承、装饰者模式和代理模式的区别

    [转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...

  7. java中继承thread类的其他类的start()方法与run()方法

    java中继承thread或者实现runnable接口的类必须重写run()方法. 如果其执行了start()方法,其实就是启动了线程的run()方法. 注意:如果是实现runnable接口的类是没有 ...

  8. Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

    Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, ...

  9. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

随机推荐

  1. CSS基础-3 文字知识

    文字知识 一.浏览器文字默认大小为16px; 行高默认大小为18px; 行高 = 文字大小 + 文字上边距 + 文字下边距 或者是 行高 = 两条基线之间的距离                    ...

  2. .NetCore下构建自己的服务配置中心-手动造轮子

    本人主要利用IdentityServer4以及SignalR来实现,IdentityServer4作为认证,SignalR来交互配置,这里一些代码可能就是部分提出来,主要介绍实现原理及方法 实现配置中 ...

  3. 使用.NET 6开发TodoList应用(22)——实现缓存

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 有的时候为了减少客户端请求相同资源的逻辑重复执行,我们会考虑使用一些缓存的方式,在.NET 6中,我们可以借助框架提供的中间件 ...

  4. python_三元运算

    条件三元运算 # 三元条件运算,如果条件为真则返回x,如果条件为假则返回y x = 3 y = 5 ret = x if x > y else y print(ret) # 返回 y值 for循 ...

  5. How to run a batch file each time the computer loads Windows

    https://www.computerhope.com/issues/ch000322.htm#:~:text=Press Start%2C type Run%2C and press Enter. ...

  6. git clone 失败 ,提示 fatal: unable to access 'https://github.com/xxx.git/': OpenSSL SSL_read: Connection was reset, errno 10054

    怎么解决? 把原来的指令 $ git clone https://github.com/cen-xi/express.git 改成 $ git clone git://github.com/cen-x ...

  7. springMVC+redis+redis自定义工具类 的配置

    1. maven项目,加入这一个依赖包即可, <dependency> <groupId>redis.clients</groupId> <artifactI ...

  8. LC 只出现一次的数字

    Given a non-empty array of integers nums, every element appears twice except for one. Find that sing ...

  9. less 循环模拟sass的for循环效果

    // 输入框部分宽度 从10px到600px 相隔10像素 .generate-widths(600); .generate-widths(@n, @i: 10) when (@i =< @n) ...

  10. 彻底剖析JVM类加载机制

    本文仍然基于JDK8版本,从JDK9模块化器,类加载器有一些变动. 0 javac编译 java代码 public class Math { public static final int initD ...