JAVA中的面向对象-3

思考1.为什么JAVA要写构造方法,用set/get方法不也一样吗?构造方法多余吗?

(1)核心本质:产生的时机不同,构造方法 :在new对象的那一瞬间执行。此时对象还没完全创建好,它就先把规矩定死了。set方法:对象已经创建完成后,你随时可以调用。

(2)不可变性的支持,final关键字,如果希望某个属性(比如身份证号、学号)一旦创建就永远不能修改,必须用 final 修饰。而final修饰的成员变量,只能通过构造方法赋值,set方法压根不能调用

因此,构造方法不是多余的,而是必须的。Set/Get 也不是构造方法的平替,而是补充。

2.集成练习

根据下面的描述定义继承结构

学生:属性:姓名、年龄、年级

老师:属性:姓名、年龄、学科

3.继承:Java 只支持单继承,不支持多继承,但可以多实现。 Object:顶级父类。

  1. 成员变量的继承:就近原则。

  2. 方法重写快捷键:Alt + Insert。

  3. 构造方法:父类的构造方法不能被继承,只能通过 super 调用父类构造器来创建对象。

7.多态(Polymorphism):

Person per = new Student(); // 父类引用指向子类对象

8.多态的前提条件① 有继承关系(或实现关系)② 有父类引用指向子类对象

9.多态中成员访问规则:成员变量,编译运行都看左边;成员方法,编译看左边,运行看右边。

10.多态下的类型转换

问题:在多态下,不能直接使用子类独有的功能。

解决方法:向下转型(强制类型转换)

Person p = new Student(); // 向上转型(自动)

Student s = (Student) p; // 向下转型(强制)

转换后即可调用子类特有的属性和方法。

相关推荐
白杨尚青1 小时前
C++进阶篇(二):多态——虚函数、重写、虚函数表与三个经典坑(附完整代码仓库)
开发语言·c++·多态·虚函数·重写·动态绑定
考虑考虑7 小时前
JDK26中的Map.ofLazy
java·后端·java ee
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源