解读什么是构造方法?能否被重写或重载?

 更新时间:2025年04月08日 10:03:57   作者:破碎的天堂鸟  
这篇文章主要介绍了什么是构造方法?能否被重写或重载问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

构造方法的定义与核心特性

构造方法(Constructor)是一种特殊的方法,主要用于在创建对象时初始化对象的成员变量。

其核心特性如下:

1、与类同名且无返回值类型

  • 构造方法的名称必须与类名完全相同,且不能声明返回值类型(包括void)。
  • 例如,public class Person的构造方法必须命名为Person(),而非其他名称。

2、自动调用与初始化对象

  • 当通过new关键字实例化对象时,构造方法会被自动调用,用于初始化对象的属性或执行必要的操作(如资源分配、参数校验等)。
  • 例如:
public class Rectangle {
    private int width, height;
    public Rectangle(int w, int h) {  // 构造方法
        width = w;
        height = h;
    }
}

3、默认构造方法的生成规则

  • 如果类中未显式定义任何构造方法,编译器会自动生成一个无参的默认构造方法(方法体为空)。
  • 若显式定义了有参构造方法,则默认无参构造方法不再自动生成,需手动添加。

4、修饰符限制与使用场景

  • 构造方法不能被staticfinalabstract等修饰符修饰。
  • 通常声明为public以便外部调用,但也可声明为private(如单例模式中控制实例化)。

5、构造代码块与初始化顺序

  • 构造代码块({}包裹的代码)会在所有构造方法执行前运行,用于统一初始化所有对象的公共属性。
  • 例如:
public class Student {
    { System.out.println("初始化代码块"); }  // 构造代码块
    public Student() { /* 构造方法 */ }
}

6、继承中的父类构造方法调用

子类实例化时,会隐式调用父类的无参构造方法(通过super()),若父类无无参构造方法,则子类需显式调用父类有参构造方法。

构造方法能否被重写?

结论:构造方法不能被重写(Override) ,原因如下:

  • 继承机制的限制

构造方法无法被继承,因为每个类的构造方法名必须与自身类名相同。子类的构造方法名必然与父类不同,因此不满足重写的“方法名相同”的前提。

  • 重写的定义冲突

方法重写要求子类方法覆盖父类中同名、同参数的方法,但构造方法的名称与类名绑定,无法在子类中复用父类构造方法名。

  • 隐式调用父类构造方法的机制

子类构造方法中必须通过super()调用父类构造方法(显式或隐式),而非直接“重写”父类构造方法。

示例说明

class Animal {
    public Animal() { System.out.println("Animal构造方法"); }
}

class Dog extends Animal {
    public Dog() { 
        super();  // 必须调用父类构造方法
        System.out.println("Dog构造方法"); 
    }
}

此时,Dog的构造方法无法重写Animal的构造方法,仅能通过调用super()实现初始化链。

构造方法能否被重载?

结论:构造方法可以被重载(Overload) ,具体表现为:

1、重载的定义与条件

  • 在同一个类中,可以定义多个参数列表不同的构造方法(参数类型、数量或顺序不同),从而实现不同的初始化方式。
  • 例如:
public class Person {
    private String name;
    private int age;
    
    public Person() {  // 无参构造方法
        name = "Unknown";
    }
    
    public Person(String name) {  // 重载构造方法1
        this.name = name;
    }
    
    public Person(String name, int age) {  // 重载构造方法2
        this.name = name;
        this.age = age;
    }
}

2、this()实现构造方法间调用

  • 可通过this(参数)在某个构造方法中调用本类的其他构造方法,简化代码复用。
  • 例如:
public class Rectangle {
    public Rectangle() { this(1, 1); }  // 调用有参构造方法
    public Rectangle(int w, int h) { /* 初始化 */ }
}

3、重载的灵活性与应用场景

重载允许根据不同的参数组合创建对象,例如:

  • 无参构造方法初始化默认值。
  • 有参构造方法根据输入参数定制对象状态。

总结

特性说明
定义与类同名、无返回值的方法,用于对象初始化。
重写(Override)不可重写,因构造方法无法继承且名称与类绑定。
重载(Overload)可重载,通过不同参数列表提供多种初始化方式。
默认生成规则无显式构造方法时生成默认无参构造方法;显式定义后需手动添加无参构造方法。
继承中的行为子类必须调用父类构造方法(通过super()),但无法覆盖父类构造方法。

实际开发建议:

  • 显式定义无参构造方法以避免继承时的潜在错误。
  • 通过重载提供多种对象初始化方式,增强类的灵活性。
  • 优先使用构造代码块统一初始化公共属性,减少重复代码。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Security基于JWT实现SSO单点登录详解

    Spring Security基于JWT实现SSO单点登录详解

    这篇文章主要介绍了Spring Security基于JWT实现SSO单点登录详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 使用IntelliJ IDEA 15和Maven创建Java Web项目(图文)

    使用IntelliJ IDEA 15和Maven创建Java Web项目(图文)

    本篇文章主要介绍了使用IntelliJ IDEA 15和Maven创建Java Web项目(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • spring项目实现单元测试过程解析

    spring项目实现单元测试过程解析

    这篇文章主要介绍了spring项目实现单元测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java后端请求接收多个对象入参的数据方法(推荐)

    Java后端请求接收多个对象入参的数据方法(推荐)

    本文介绍了如何使用SpringBoot框架接收多个对象作为HTTP请求的入参,通过创建数据模型、DTO类和Controller,我们可以轻松处理复杂的请求数据
    2024-11-11
  • 在Struts2中如何将父类属性序列化为JSON格式的解决方法

    在Struts2中如何将父类属性序列化为JSON格式的解决方法

    本篇文章,小编将为大家介绍关于在Struts2中如何将父类属性序列化为JSON格式的解决方法,有需要的朋友可以参考一下
    2013-04-04
  • Java设计模式之责任链模式的示例详解

    Java设计模式之责任链模式的示例详解

    责任链模式是将链中的每一个节点看做是一个对象,每个节点处理的请求均不相同,且内部自动维护下一个节点对象,当一个请求从链式的首段发出时,会沿着链的路径依次传递给每一个节点对象。本文将通过示例和大家详细聊聊责任链模式,需要的可以参考一下
    2022-11-11
  • 解析java中This的用法分析

    解析java中This的用法分析

    本篇文章是对java中This的用法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • SpringBoot中使用Swagger的最全方法详解

    SpringBoot中使用Swagger的最全方法详解

    Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的Web服务,这篇文章主要给大家介绍了关于SpringBoot中使用Swagger的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Java DirectByteBuffer堆外内存回收详解

    Java DirectByteBuffer堆外内存回收详解

    这篇文章主要为大家详细介绍了Java中发DirectByteBuffer堆外内存回收,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-10-10
  • Spring Boot集成Spring Cache过程详解

    Spring Boot集成Spring Cache过程详解

    这篇文章主要介绍了Spring Boot集成Spring Cache过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论