Java之构造器
构造器
1.构造器,也称构造方法、构造函数。作用是构造出来一个类的实例,确保对象得到初始化。
2.构造器的格式: 权限修饰符 类名(无参/有参){}。
3.如果类中没有构造器时Java编译器会自动创建无参构造函数,我们可省略不写无参构造函数,实例化对象时无需赋值,但是倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错,倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错,这时就要自己写上无参的构造函数,所以类中一般都要存在无参构造函数,否则实例化对象时必须赋值(要么有参和无参都不写,要么都写)。
构造函数的调用
class SuperClass { private int n; SuperClass(){ System.out.println("SuperClass()"); } SuperClass(int n) { System.out.println("SuperClass(int n)"); this.n = n; } } // SubClass 类继承 class SubClass extends SuperClass{ private int n; SubClass(){ // 自动调用父类的无参数构造器 System.out.println("SubClass"); } public SubClass(int n){ super(300); // 调用父类中带有参数的构造器 System.out.println("SubClass(int n):"+n); this.n = n; } } // SubClass2 类继承 class SubClass2 extends SuperClass{ private int n; SubClass2(){ super(300); // 调用父类中带有参数的构造器 System.out.println("SubClass2"); } public SubClass2(int n){ // 自动调用父类的无参数构造器 System.out.println("SubClass2(int n):"+n); this.n = n; } } public class TestSuperSub{ public static void main (String args[]){ System.out.println("------SubClass 类继承------"); SubClass sc1 = new SubClass(); SubClass sc2 = new SubClass(100); System.out.println("------SubClass2 类继承------"); SubClass2 sc3 = new SubClass2(); SubClass2 sc4 = new SubClass2(200); } }
运行结果:
------SubClass 类继承------ SuperClass() SubClass SuperClass(int n) SubClass(int n):100 ------SubClass2 类继承------ SuperClass(int n) SubClass2 SuperClass() SubClass2(int n):200
java中,子类为什么会自动继承父类的无参构造方法?
其实这句话本身就是错误的。因为构造函数不能继承,只能被调用。 正确的说法应该是,Java中子类会自动调用父类的无参构造方法。那么,子类为什么会自动调用父类的无参构造方法呢?其实可以理解成(子类继承了父类,其实就是相当于实例化子类也就实例化了父类,所以并不是会只自动继承父类的无参构造函数,只要子类和父类有一样的有参构造函数,一样会继承)。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。
子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中,明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。
浙公网安备 33010602011771号