2018-05-01
子类初始化过程
构造器的调用遵循以下的顺序:
(1):调用基类构造器。这个步骤会不断地反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类,等等,直到最低层的导出类。
(2):按声明顺序调用成员的初始化方法。 .
(3):调用导出类构造器的主体。(也就是文中的main方法中的内容)
这样做的最终目的:让方法中的所有成员变量都得到初始化。
创建子类对象之前会先创建父类对象
调用子类构造器之前,在子类构造器之前会先调用父类的构造器,默认调用的是无参构造器
如果父类不存在可以被子类调用的构造器(父类所有的状态和行为搜用private修饰),则不存在子类。(事实上,这种情况基本不存在)
如果父类没有提供无参的构造器,此时子类必须显示通过super语句去调用父类带参数的构造器。(看图)
代码举例:
//动物 class Animal { private String name; private int age; Animal(String name, int age){ System.out.println("动物构造器"); this.name = name; this.age = age; } public String getName(){ return name; } } //鱼 class Fish extends Animal { private String color;//颜色 Fish(String name, int age, String color){ super(name,age);//显示调用构造器,super调用父类构造器,必须放在子类构造器第一句话。 this.color = color; //super();//隐式调用当前对象的父类的无参构造方法 } public void say(){ System.out.println(getName() + "," +this.color); } } //子类初始化过程 class SubClassInitDemo { public static void main(String[] args) { //创建一个鱼对象 Fish f = new Fish("金鱼", 5, "红色"); f.say(); } }
输出结果:
动物构造器
金鱼,黄色
原文地址:https://www.cnblogs.com/sunNoI/p/8977992.html
时间: 2024-11-09 03:19:42