当前位置: 首页 > news >正文

Java:构造函数与对象

第一章:构造函数揭秘 —— 创造者的第一次触碰

构造函数,顾名思义,是用于创建和初始化对象的特殊方法。它没有返回类型,名字与类名一致。构造函数是对象诞生的第一步,也是最至关重要的一步。让我们通过一个生动的例子来理解构造函数的魔力:

public class Car {private String make;private String model;private int year;// 构造函数public Car(String make, String model, int year) {this.make = make;this.model = model;this.year = year;}// Getter 和 Setter 方法省略...
}

在上述示例中,Car 类定义了汽车的基本属性:制造商(make)、型号(model)和生产年份(year)。构造函数接收这三个参数,并将它们赋值给类的相应属性。这就是创造者的第一次触碰,赋予了对象生命和特性。


第二章:构造函数重载 —— 多元化的生命起源

构造函数重载提供了创建对象的多种途径,就像自然界中生命的多样性。在同一个类中,你可以定义多个构造函数,每个构造函数具有不同的参数列表。下面,我们将扩展 Car 类,加入更多的构造选项:

public class Car {private String make;private String model;private int year;private double price;// 无参构造函数public Car() {this("Unknown", "Unknown", 1970, 0.0); // 使用默认值}// 构造函数重载public Car(String make, String model) {this(make, model, 1970, 0.0); // 使用默认的年份和价格}public Car(String make, String model, int year) {this(make, model, year, 0.0); // 使用默认的价格}public Car(String make, String model, int year, double price) {this.make = make;this.model = model;this.year = year;this.price = price;}// Getter 和 Setter 方法省略...
}

现在,我们可以通过四种不同的构造函数来创建 Car 对象,每一种都代表了不同的生命起源。这种灵活性使得我们能够根据具体需求,轻松地初始化对象的不同状态。


第三章:构造函数链 —— 继承的血脉传承

在Java中,子类不仅可以继承父类的属性和方法,还可以调用父类的构造函数。这称为构造函数链,它确保了子类对象的正确初始化。让我们通过一个继承的例子来说明这一点:

public class Vehicle {protected String make;protected String model;// 构造函数public Vehicle(String make, String model) {this.make = make;this.model = model;}
}public class Car extends Vehicle {private int year;private double price;// 构造函数public Car(String make, String model, int year, double price) {super(make, model); // 调用父类构造函数this.year = year;this.price = price;}// Getter 和 Setter 方法省略...
}

在上面的代码中,Vehicle 类是所有交通工具的基础,而 Car 类继承了 Vehicle 类的属性和构造函数。Car 的构造函数首先调用了 super 关键字,这意味着它调用了父类 Vehicle 的构造函数,从而确保了所有继承自父类的属性都被正确初始化。


第四章:构造函数与封装 —— 秘密花园的守门人

构造函数不仅是对象的生命之源,也是封装原则的守护者。通过构造函数,我们可以控制对象的初始化过程,限制外部直接访问和修改对象的内部状态。这就像花园的守门人,只有经过精心挑选的访客才能进入秘密花园。

在我们的 Car 类中,构造函数是唯一可以直接设置 makemodelyearprice 属性的地方。通过将这些属性声明为私有(private),我们确保了外部代码不能直接修改这些属性,只能通过构造函数和公共的 getter/setter 方法间接访问。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 服务器怎么进PE系统?
  • Wintopay - 一站式国际支付收款平台
  • leetcode74. 搜索二维矩阵
  • 一周涨8K star!RAG技术迎来大升级,速度关注
  • Postgresql - 用户权限数据库
  • Python酷库之旅-第三方库Pandas(017)
  • 5G中的RedCap
  • 【源码开源】C#桌面应用开发:串口调试助手
  • JS爬虫实战之极验四代
  • C# Winform之propertyGrid控件使用详解和分组设置
  • 这个软件可无限制免费领取金币,领取后即可自由实现AI文生图,AI Chat及其AI文生PPT等AI功能
  • 一文带你掌握SpringMVC扩展点RequestBodyAdvice和ResponseBodyAdvice如何使用及实现原理
  • 【基础算法总结】链表
  • 力扣 202快乐数
  • Ollama + Openwebui 本地部署大型模型与交互式可视化聊天
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • android 一些 utils
  • Asm.js的简单介绍
  • golang 发送GET和POST示例
  • Java多态
  • Java深入 - 深入理解Java集合
  • js ES6 求数组的交集,并集,还有差集
  • Laravel 菜鸟晋级之路
  • 给新手的新浪微博 SDK 集成教程【一】
  • 你不可错过的前端面试题(一)
  • 前端攻城师
  • 软件开发学习的5大技巧,你知道吗?
  • 设计模式 开闭原则
  • 我的业余项目总结
  • 再谈express与koa的对比
  • 正则学习笔记
  • 06-01 点餐小程序前台界面搭建
  • #AngularJS#$sce.trustAsResourceUrl
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #Spring-boot高级
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (1)虚拟机的安装与使用,linux系统安装
  • (3)llvm ir转换过程
  • (C语言)fgets与fputs函数详解
  • (C语言)共用体union的用法举例
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (libusb) usb口自动刷新
  • (备份) esp32 GPIO
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (回溯) LeetCode 78. 子集
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • **CI中自动类加载的用法总结
  • .chm格式文件如何阅读
  • .form文件_SSM框架文件上传篇
  • .gitignore