java继承父类执行顺序_java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。
public class FatherTest {
private String name;
FatherTest(){
System.out.println("--父类的无参构造函数--");
}
FatherTest(String name){
this.name=name;
System.out.println("--父类的有参构造函数--"+this.name);
}
static{
System.out.println("--父类的静态代码块--");
}
{
System.out.println("--父类的非静态代码块--");
}
public void speak(){
System.out.println("--父类的方法--");
}
}
加入一个main程序后
public static void main(String[] args) {
System.out.println("--父类主程序--");
FatherTest father=new FatherTest("父亲的名字");
father.speak();
}
执行结果为:
--父类的静态代码块--
--父类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法—
可以很明显的看出来执行顺序:静态代码块—主程序—非静态代码块—构造函数—一般方法。
如果加入子类的继承以后,情况就会变得复杂些。比如我们再新建一个测试子类。
public class SonTest extends FatherTest {
private String name;
static{
System.out.println("--子类的静态代码块--");
}
{
System.out.println("--子类的非静态代码块--");
}
SonTest(){
System.out.println("--子类的无参构造函数--");
}
SonTest(String name){
this.name=name;
System.out.println("--子类的有参构造函数--"+this.name);
}
@Override
public void speak(){
System.out.println("--子类Override了父类的方法--");
}
}
然后再加入一个main函数
public static void main(String[] args) {
System.out.println("--子类主程序--");
FatherTest father=new FatherTest("父亲的名字");
father.speak();
SonTest son=new SonTest("儿子的名字");
son.speak();
}
执行结果为:
--父类的静态代码块--
--子类的静态代码块--
--子类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法--
--父类的非静态代码块--
--父类的无参构造函数--
--子类的非静态代码块--
--子类的有参构造函数--儿子的名字
--子类Override了父类的方法--
加入了子类以后,执行顺序有了新的变化,我们可以总结一下。首先第一部分执行的是父类的静态代码块—子类的静态代码块—主程序。这一部分都是执行一次,与建立多少对象没有关系。第二部分new了一个父类对象,并调用了方法。执行了它的非静态代码块—构造函数—一般方法。第三部分new了一个子类的对象,并调用了方法。执行顺序为父类的非静态代码块—父类的无参构造函数,然后是子类的非静态代码块—子类构造函数—子类的方法。
java继承父类执行顺序_java中子类继承父类程序执行顺序问题相关推荐
- java继承怎么老是出错_java中子类继承父类时总是出错怎么回?
权限public > 包(package,默认,也就是什么权限修饰符都不加) > proteced > private 子类继承了父类的所有成员(这样说实际是不对的),但只能访问父类 ...
- insert时调用本身字段_java中子类调用父类构造方法注意事项
protected继承 继承有个特点,就是子类无法访问父类的private字段或者private方法.例如,Student类就无法访问Person类的name和age字段: class Person ...
- php 中如何重载父类的方法_PHP中子类重载父类的方法【parent::方法名】
在PHP中不能定义重名的函数,也包括不能再同一个类中定义重名的方法,所以也就没有方法重载.单在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法 ...
- java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...
今天学习Java三大特征之一:继承的时候,产生了一些疑问,最后通过网上查找和各位网友的帮助,终于拔开云雾见日出.下面进入正题: 首先:子类对象拥有父类中的所有属性和方法:在这里,很多人会问构造器可以继 ...
- java 继承先后顺序_Java中的继承关系的加载顺序
/* 在加载类时,Java虚拟机先加载父类再加载子类,再对静态初始化块. 静态成员变量(类变量).静态方法进行一次初始化. 只有调用new方法时才会创建类的对象.按照父子继承关系进行初始化, 首先执行 ...
- java不能覆盖父类的_java中子类覆盖父类方法所必须满足的条件
一.描述 子类重写(覆盖)父类的方法必须满足的条件: 1.父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用super关键字来访问父类中的被重写的方法), 如果父类中的方法为pr ...
- JAVA子类和父类在同一个包中,子类和父类在同一个包中继承性
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 请问在同一个包中和在同一个源文件有什么区别?????? 以下子类和父类在同一个源文件中,如何保存为在同一个包中? class Father { priva ...
- 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例
前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...
- python中子类调用父类的初始化方法
http://bestchenwu.iteye.com/blog/1044848 http://www.crazyant.net/1303.html 一直不太理解python的初始化方法,今天找了下资 ...
最新文章
- python之⾯向对象基础
- 迭代器、for循环本质、生成器、常用内置方法整理
- 最长回文子串和回文链表
- java简述会话对象的生命周期_简述Java Web三大作用域对象
- UVa1607 poj1435 UVaLive1686 Gates
- Oracle中的Round和Trunc
- 【kafka】Failed to allocate.memory within the configed max blocking time
- 【CMAKE】 is not able to compile a simple test program.
- 检测React组件外部的点击
- halcon 仿射变换和区域跟随
- 叶片制成切片的结构示意图_更集成的发动机!洞悉UTC 3D打印整体式半叶片
- iOS NSData简单解析
- python 教程 第十章、 输入/输出
- 教你配置赏心悦目的开发神器 Atom-郭永峰-专题视频课程
- 苹果手机微信语音没声音怎么回事_iPhone XS Max相机、普通照片模式下拍照没声音怎么办?...
- 常用的企业邮箱有哪些?企业邮箱有哪几种?
- oracle 按天数 均值,oracle 按天数统计数据
- C++ reverse()函数用法详解(深入了解,一文学会)
- 吉大计算机学院宣讲,计算机科学与技术学院“喜迎十九大,争做学校宣传员”寒假社会实践系列报道(十六)...
- python做股票系统_GitHub - pustar/stock: stock,股票系统。使用python进行开发。