版权声明:欢迎转载 https://blog.csdn.net/qq_37875585/article/details/88101625
构造器(构造器方法)
-
什么是构造器
- 用于封装对象属性的实例化过程,创建对象时候调用构造器,复用对象属性实例化过程
-
语法
- 在类中声明,方法名与类名一致(包含大小写)
- 不能定义返回值,也不能使用void
- 构造方法可以有参数,参数用于初始化对象的属性
- 使用 new 运算调用构造器,创建对象
- 如果不定义构造器,Java 编译器会自动提供 默认构造器
- 如果定义了任何构造器,Java编译器将不再提供默认构造器
构造器可以重载
- 参数不同构造器,称为构造器重载。
- 构造器重载用于实现:对象有多种数据初始化方式
- 对象的数据有多种方式初始化时候,使用重载的构造器
this() 重用构造器
-
this() 用于在一个构造器值调用另外一个构造器。
-
this() 方法的目的是为了重用构造器中的逻辑
-
this() 只能在构造器中调用。
-
this() 只能写在构造器的第一行。
-
案例:
public class Demo01 { public static void main(String[] args) { /* * this() 重用构造器 */ Circle c = new Circle(); System.out.println(c); } }
class Circle{ int x,y; double r; double s;//面积 public Circle() { this(0,0,1); System.out.println("Circle()"); } public Circle(int x, int y, double r) { this.x = x; this.y = y; this.r = r; s = Math.PI * r * r; } @Override public String toString() { return "Circle [x=" + x + ", y=" + y + ", r=" + r + ", s=" + s + "]"; } }
继承中的构造器
- 构造器不能继承!
- 子类一定调用父类构造器
- 如果父类中没有无参数构造器,默认调用时候子类中会出现编译错误。一般在父类中定义无参数构造器加以解决。
- 一般将子类中公共的属性初始化逻辑封装到父类中,子类利用super()方法调用这个构造器,达到复用构造器逻辑的目的。
- super() 用于子类调用父类构造器
- 默认情况下,编译器自动添加 super(),自动调用服务无参数构造器
- 使用super(参数)调用父类中有参数构造器,达到复用构造器的目的
- super() 只能在子类构造器中使用,只能写在第一行。
- 设计的思路是: 将父类属性的初始化写在父类中,由子类调用,这样就可以复用逻辑,消除冗余的初始化代码。