Java 构造函数调用的特殊性
在 Java 构造函数的调用有一定的特殊性,需要理解这些特殊性才能正确地编写和使用构造函数。
构建函数链式调用
当调用子类结构函数时,它会自动调用其超级结构函数。这种行为被称为结构函数链调用。子类结构函数中的第一行代码将始终是显式或隐式调用超级结构函数的句子。
立即学习“Java免费学习笔记(深入);
class Parent { Parent() { System.out.println("Parent constructor called"); } } class Child extends Parent { Child() { System.out.println("Child constructor called"); } } public class Main { public static void main(String[] args) { Child child = new Child(); // 输出: // Parent constructor called // Child constructor called } }
调用显式结构函数
有时需要显式调用超级结构函数,可以使用 super 关键字。
class Parent { Parent(int value) { System.out.println("Parent constructor with value " + value + " called"); } } class Child extends Parent { Child() { super(10); System.out.println("Child constructor called"); } } public class Main { public static void main(String[] args) { Child child = new Child(); // 输出: // Parent constructor with value 10 called // Child constructor called } }
默认构建函数
如果父类没有定义无参结构函数,则子类也不能定义无参结构函数。子类必须明确调用超级参结构函数。
实战案例
以下是显示构造函数链式调用的实际案例:
class Shape { protected String color; Shape(String color) { this.color = color; } } class Circle extends Shape { private double radius; Circle(double radius, String color) { super(color); this.radius = radius; } } public class Main { public static void main(String[] args) { Circle circle = new Circle(5.0, "Red"); System.out.println("Circle color: " + circle.color); System.out.println("Circle radius: " + circle.radius); // 输出: // Circle color: Red // Circle radius: 5.0 } }
该代码演示了父子类之间的构造函数链调用,可以通过子类构造函数访问和初始化父类属性。
以上是Java 构造函数调用的特殊性是什么?详情请关注图灵教育的其他相关文章!