什么是构造器???:
------构造器是Java和C#学习中很重要的一个概念,构造器可以提供许多特殊的方法,构造器作为一种方法,负责类中成员变量(域)的初始化。实例构造器分为缺省构造器(无参构造器)和非缺省构造器(有参构造器)。
------构造器最大的用处就是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化 。如果想改变这种默认的初始化,就可以通过自定义构造器来实现。
两个继承关系的类之间因而构造器而引出的问题:
------比方说有两个继承关系的类,Father & Son,首先一点的是要知道构造器(无论有参构造器还是无参)执行时都会先执行一句 super();会去调用父类Father的构造方法,如果父类的构造方法是无参构造,那么父类即使有一些属性,也是得不到初始化的机会的。如果父类是有参构造器,那么我们如果想给父类的属性进行初始化,可以super(//这里填父类构造器的参数),通过子类的有参构造器来 “顺路“ 给父类构造器初始化。
package com.javase.parctice;
public class Demo6 {
public static void main(String[] args) {
Son son = new Son(666);
//最终运行结果为0 666
//也就是说Son里传入666 引用给了son
//而Father接收不到参数
//只能输出默认值0
son.print();
}
}
class Father{
private int id;
//不写构造器了 会自动生成无参构造器
public void print(){
System.out.println(id);
}
}
class Son extends Father{
private int id;
public Son(int id) {
//这个super()没啥用 因为调用父类时是个无参
//父类也有super() 依然因为无参 没啥影响
super();
this.id = id;
}
public void print(){
//这里我们super一下父类的print方法
//但实际
super.print();
System.out.println(this.id);
}
}