父类的构造方法总会被调用吗?构造方法可以调用重载的构造方法或它的父类的构造方法。如果它们都没有被显式调用,那编译器就会自动地将superO作为构造方法的第一条语句。例如:public A()public A()等价于super();public A(double d)public A(double d)等价于// some statementssuper () ;some statementsLiang,Introduction toJava Programming.EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 6 父类的构造方法总会被调用吗? 构造方法可以调用重载的构造方法或它的父类的构造 方法。如果它们都没有被显式调用,那编译器就会自 动地将super()作为构造方法的第一条语句。例如: public A(double d) { // some statements } 等价于 public A(double d) { super(); // some statements } public A() { } 等价于 public A() { super(); }
使用super关键字关键字super是指这个super出现的类的父类这个关键字super有以下两种途径:调用父类的构造方法调用父类的方法Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 7 使用super关键字 调用父类的构造方法 调用父类的方法 关键字super是指这个super出现的类的父类。 这个关键字super有以下两种途径:
警告要调用父类的构造方法就必须使用关键字super。在子类中调用父类构造方法的名字会引起一个语法错误。Java要求使用关键字super的语句应该是构造方法的第一条语句Liang.Introduction to JavaProgramming.EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 8 警 告 要调用父类的构造方法就必须使用关键 字super。在子类中调用父类构造方法的 名字会引起一个语法错误。Java要求使 用关键字super的语句应该是构造方法的 第一条语句
构造方法链构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。这就被称为构造方法链(constructorchaining)publicclass Facultyextends Employeepublic static void main(string[) args) (new Faculty();1public Faculty()(System.out.println("(4) Faculty's no-arg constructor is invoked");11class EmployeeextendsPersonfpublicEmployee()(this("(2)Invoke Employee's overloaded constructor");System.out.println("(3) Employee's no-arg constructor is invoked");1public Employee(string s)(System.out.println(s);子1class Person fpublicPerson()(System.out.println("(l) Person's no-arg constructor is invoked");1rightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 9 构造方法链 public class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); } } class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); } public Employee(String s) { System.out.println(s); } } class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); } } 构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。这就 被称为构造方法链(constructor chaining)
动画跟踪执行public class Faculty extends Employeepublic static void main(string[l args)从main方法new Faculty();开始执行1public Faculty()(System.out.println("(4) Faculty's no-arg constructor is invoked");1class Employee extendsPerson(public Employee()(this("(2) Invoke Employee's overloaded constructor");System.out.println("(3) Employee's no-arg constructor is invoked");1publicEmployee(string s)(System.out.println(s);1class Person(public Person()(System.out.println("(l) Person's no-arg constructor is invoked");寻Liang,IntroductiontoJavaProgramming,EighthEdition,(c)2011Pearson Education,Inc.All10rightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 10 跟踪执行 public class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); } } class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); } public Employee(String s) { System.out.println(s); } } class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); } } 1. 从main方法 开始执行 动 画