Java面向对象程序设计课程总结
(1)前言
从最初的变量定义到最终的JavaFX项目开发,课程难度呈现出渐进式上升的特点。Blog作业的连贯性设计帮助我系统化知识体系,实验环节则提供了宝贵的实践场景。
(2)面向对象技术总结
总结几个经典知识:
1,封装
从:public class Student {
private String name;
private int age;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}的简单属性获得与修改到:public void updateGrade(String courseId, double score) {
validateCourse(courseId); // 课程验证
validateScore(score); // 分数验证
records.get(courseId).setScore(score);
calculateGPA(); // 自动更新GPA
}的完整行为
2,继承
从简单继承父类的方法属性到可以拥有自己的属性方法
3,多态
方法重载与方法重写:class Printer {
void print(String content) { /.../ }
void print(Image image) { /.../ } // 重载
}。。。。abstract class Shape {
abstract double area();
}到
class Circle extends Shape {
double area() { return Math.PI * radius * radius; } // 多态实现
}
Shape shape = new Circle();
shape.area(); // 调用实际对象的方法
4,抽象类
抽象类是一种面向对象设计的关键构造,它兼具“定义规范”与“提供部分实现”的双重角色。它本身不可被实例化,其核心存在价值在于为具有显著共性的子类族群建立基础框架。一方面,它通过声明“抽象方法”(不含具体实现)强制要求所有继承它的子类必须提供这些关键行为的具体定义,从而建立了不容违背的“行为契约”;另一方面,它又能包含已完全实现的“具体方法”和共享的“属性”(通常设置为受保护的访问控制),使得所有子类能自动复用这些公共逻辑和基础状态,有效消除了重复代码并确保共性逻辑的一致性。一个精心设计的抽象类,正是在规范子类必须“做什么”(通过抽象方法)和提供它们“可以利用什么”(通过具体实现和共享状态)之间取得的精妙平衡,是构建稳定、可扩展类层次结构的基石。
5,接口
接口是面向对象设计的纯粹契约。它仅定义一组方法的签名,不包含任何具体实现或状态(即属性),从而强制要求所有实现该接口的类必须提供这些方法的完整定义。接口的本质在于定义“行为规范”和“能力边界”。其核心价值体现在三方面:其一,它实现了功能的抽象与解耦,让调用者只依赖规范而非具体实现;其二,它突破了单继承的限制,允许一个类同时实现多个接口,获得多重、混合的行为能力(例如一个类可同时实现 Serializable 和 Runnable);其三,它成为高度灵活的设计基石,通过统一的操作入口(接口引用),不同实现类的对象可以互换使用,极大提升了代码的扩展性和通用性。一个设计良好的接口,正是对角色(做什么)的精确定义,而不是对身份(是什么)的限定。
6,JavaFX
基础构建:StackPane root = new StackPane();
Button btn = new Button("确定");
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
动态响应:btn.setOnAction(event -> {
System.out.println("按钮被点击");
});
样式绑定:// CSS样式
btn.setStyle("-fx-background-color: #4CAF50;");
// 数据绑定
label.textProperty().bind(textField.textProperty());
(3)采坑心得
亲身实践后深刻体会到:面向对象设计的诸多陷阱往往源于对核心原则的把握失衡或使用不当。例如,在封装上,曾因贪图便利而暴露内部细节,导致数据被随意修改、业务规则形同虚设;在继承体系中,未预料到的脆弱的父类继承问题,一次看似无害的父类修改,竟导致多个未曾重写方法的子类逻辑意外崩溃;面对多态需求,也曾陷入依赖大量instanceof判断的泥潭,不仅代码臃肿,每次新增类型都如履薄冰;接口设计更是踩过“大而全”的深坑,职责不清晰、方法过多迫使实现类背上沉重负担;而在异常处理上,“默默吞掉异常”的黑洞行为曾让Bug的溯源变得异常艰难。这些痛点是宝贵教训:牢固掌握抽象类/接口的角色定位、严守封装边界、警惕过度继承、拥抱纯契约设计、妥善处理异常,是将面向对象思想真正落地的关键所在。每一次挫折,都是认知深化的阶梯。
(4)改进建议及总结
1,实验提交系统,不能复制粘贴就算了,还经常崩溃闪退。手打代码后经常要花半小时左右时间纠错。希望纠正。
2,反转课堂,真的可以听懂学生的讲述吗。
浙公网安备 33010602011771号