class Person { private String name="". private int age=0.
public Person() { System.out.println("person无参数构造函数"). }
public Person(String name,int age) { this.name=name. this.age=age. System.out.println("person 2 参数的构造函数"). } }
class Student extends Person {
private String school. private String grade.
public Student() { System.out.println("student 无参数的构造函数"). }
public Student(String name ,int age,String school) { System.out.println("student 3 参数的构造函数"). } public Student(String name ,int age,String school,String grade) { super(name,age). this.school=school. this.grade=grade. System.out.println("student 4 参数的构造函数,super()."). } }
class Test { public static void main(String [] args) { System.out.println("st1:"). Student st2=new Student(). System.out.println("---------------------------"). System.out.println("st2:"). Student st=new Student("zhangshan",76,"武大"). System.out.println("---------------------------"). System.out.println("st3:"). Student st3=new Student("lisi",24,"武大","研究生").
} } |
/*
=======================================
输出如下:
E:\JavaWork>java Test
st1:
person无参数构造函数
student 无参数的构造函数
---------------------------
st2:
person无参数构造函数
student 3 参数的构造函数
---------------------------
st3:
person 2 参数的构造函数
student 4 参数的构造函数,super().
**************************************
说明了创建一个子类的对象实例的时候,必先调用父类的无参数的构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统将不会给它创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器将会报错,但如果在子类的构造函数中指定用父类的带参数的构造函数的时候,或者在父类中加一个无参数的构造函数,就不会报错。
=============================================
我们假设A是B的父类,B是A的子类。
1、如果程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,如果用户提供了自己的构造函数,则编译器就不在提供默认的无参数构造函数。
2、子类B实例化时会自动调用父类A的默认构造函数,所以如果A的默认的无参数的构造函数为private,则编译器会报错,而如果A没有提供默认的无参数的构造函数,而提供了其他类型的构造函数,编译器同样会报错,因为B找不到A的默认无参数构造函数。所以,我们最好给父类A提供一个无参数的构造函数。
3、或者在B的构造函数中显示的调用父类A的有参构造函数。
相关文章
如何在JBuilder2007中配置MyEcli e
Java虚拟机类装载:原理、实现与应用
用J2ME在移动设备上实现动画
Java本地接口工作方式初探
Java继承时构造函数的调用
基于Struts1.2.9框架的登录页面的处理过程
java编程中异常处理的优劣观
移动宽带接入WiMAX组网方式详解
应用与技巧:消除无线网络安全风险
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛