1、 达内广州软件培训 http:/ 广州达内岗顶中心 广州达内江南中心天河区天寿路 105 号天寿大厦 4 层 天河龙口东路 5 号龙晖大厦 403-405 室 海珠区礼岗路 10 号 2楼 电话:020-38097500 联系电话:020-85262372 联系电话:020-34430387 Java 中子类和父类间的调用关系在讲之前,一些基本知识是应该具备的:1、如果一个类中没有定义构造器,编译器在编译时会自动加上默认无参构造器:public ClassName 2、this 和 super 的区别。3、每个类直接或间接是 Object 的子类,Object 只有一个无参构造方法。4、编译器
2、会在每个构造方法的第一行隐式添加父类的默认无参构造器,即添加super()。新手容易犯的错误:class Employee extends Object public Employee(int id) class Teacher extends Employee public Teacher() 以上代码会产生编译错误:Implicit super constructor Employee() is undefined. Must explicitly invoke another constructor因为父类定义了一个带参数的构造器,因此编译器不会添加默认无参构造方法,但是因为在子类的构造
3、器中没有显式调用父类的某个构造方法,因此编译器会自动添加super()方法, 但是父类中不存在默认无参构造方法,因此会提示默认无参构造方法未定义错误。修改后的代码:class Employee public Employee(int id) class Teacher extends Employee public Teacher() super(10);这样,在子类的构造器中显式调用了父类的某个构造器,所以编译器不会自动添加 super()方法。构造器的访问修饰符:达内广州软件培训 http:/ 广州达内岗顶中心 广州达内江南中心天河区天寿路 105 号天寿大厦 4 层 天河龙口东路 5 号
4、龙晖大厦 403-405 室 海珠区礼岗路 10 号 2楼 电话:020-38097500 联系电话:020-85262372 联系电话:020-34430387 一般可以用 public,protected,default 和 private 修饰,但是对于 private,子类是无法调用该类构造器的。多层次调用父类构造方法:假设我们有这样一个层次结构:Object-Employee-Teacher-Professorclass Employee public Employee() System.out.println(“Employee constructor called“);class
5、 Teacher extends Employee public Teacher() System.out.println(“Teacher constructor called“);class Professor extends Teacher public Professor() System.out.println(“Professor constructor called“);public class Test public static void main(String args) Employee p = new Professor();打印结果:Employee constructor calledTeacher constructor calledProfessor constructor called在创建 Professor 对象时(new Professor(),首先会找到该类的无参构造方法,然后首先调用 super()方法,调用 Teacher 类的无参构造方法,接着再调用 Employee 的无参构造方法,最后再调用 Object 的无参构造方法。最后再打印出信息。达内广州 Java 更多课程教学,请点击进入平台:http:/