基于面向对象的专项 知识点

一、核心概念与特性

  1. 四大基本特性

· 封装:将数据和操作数据的方法绑定在一起

public class Student {

private String name; // 数据隐藏

// 对外提供访问接口

public String getName() {

return name;

}

}

· 继承:子类复用父类的属性和方法

class Animal {

void eat() { System.out.println("Eating"); }

}

class Dog extends Animal { // 继承

void bark() { System.out.println("Barking"); }

}

· 多态:同一接口,多种实现

// 编译时多态(重载)

void print(int i) { }

void print(String s) { }

// 运行时多态(重写)

Animal myDog = new Dog(); // 向上转型

myDog.eat(); // 动态绑定到Dog的eat方法

· 抽象:提取共性,隐藏细节

abstract class Shape {

abstract double area(); // 抽象方法

}

  1. 类与对象的关系

类(Class):蓝图、模板

↓ 实例化

对象(Object):具体的实例

二、高级概念与机制

  1. 构造与析构

· 构造函数链(构造函数调用顺序)

· 复制构造函数(深拷贝 vs 浅拷贝)

· 析构函数与资源管理(RAII原则)

  1. 访问控制

修饰符 类内 包内 子类 包外

private ✓ ✗ ✗ ✗

default ✓ ✓ ✗ ✗

protected ✓ ✓ ✓ ✗

public ✓ ✓ ✓ ✓

  1. 静态成员

· 类属性/类方法 vs 实例属性/实例方法

· 静态代码块与初始化顺序

  1. 接口与抽象类的对比

// 接口:完全抽象,多重继承

interface Flyable {

void fly(); // 默认public abstract

default void land() { } // Java8默认方法

}

// 抽象类:部分实现,单继承

abstract class Bird {

abstract void sing();

void eat() { } // 可以有具体方法

}

三、设计原则(SOLID)

  1. 单一职责原则(SRP)

· 一个类只负责一项职责

  1. 开闭原则(OCP)

· 对扩展开放,对修改关闭

// 使用策略模式实现OCP

interface Payment {

void pay();

}

class CreditCardPayment implements Payment { }

class PayPalPayment implements Payment { }

  1. 里氏替换原则(LSP)

· 子类必须能够替换父类

· 前置条件不能强化,后置条件不能弱化

  1. 接口隔离原则(ISP)

· 建立单一接口,避免臃肿接口

  1. 依赖倒置原则(DIP)

· 高层模块不依赖低层模块,二者都依赖抽象

// 依赖注入实现

class UserService {

private UserRepository repository; // 依赖抽象

public UserService(UserRepository repo) {

this.repository = repo;

}

}

四、关键设计模式

  1. 创建型模式

· 工厂模式:隐藏对象创建细节

· 单例模式:确保一个类只有一个实例

// 双重检查锁实现单例

class Singleton {

private static volatile Singleton instance;

private Singleton() { }

public static Singleton getInstance() {

if (instance == null) {

synchronized (Singleton.class) {

if (instance == null) {

instance = new Singleton();

}

}

}

return instance;

}

}

  1. 结构型模式

· 适配器模式:接口转换

· 装饰器模式:动态添加功能

· 组合模式:树形结构处理

  1. 行为型模式

· 策略模式:算法族封装

· 观察者模式:发布-订阅机制

· 模板方法模式:定义算法骨架

五、高级特性

  1. 反射机制

// Java反射示例

Class<?> clazz = Class.forName("com.example.User");

Object obj = clazz.newInstance();

Method method = clazz.getMethod("setName", String.class);

method.invoke(obj, "Alice");

  1. 泛型编程

· 类型参数化

· 类型擦除与通配符(<? extends T>, <? super T>)

  1. 注解与元编程

// 自定义注解

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public @interface LogExecution {

String value() default "";

}

  1. 内存管理与垃圾回收

· 对象生命周期

· 引用类型(强、软、弱、虚)

· GC算法(标记清除、复制、分代收集)

六、面向对象设计质量指标

  1. 内聚性与耦合度

· 高内聚:类内部元素关联紧密

· 低耦合:类之间依赖关系弱

  1. 设计度量

· 继承深度:避免过深继承树

· 方法复杂度:圈复杂度控制

· 类职责:LCOM(缺少内聚方法数)

  1. 设计坏味道

· 上帝类(God Class)

· 长方法(Long Method)

· 循环依赖(Circular Dependency)

· 霰弹式修改(Shotgun Surgery)

七、UML建模

  1. 核心图例

类图:类结构、关系

时序图:对象交互时序

状态图:对象状态转换

用例图:系统功能边界

  1. 关系类型

· 关联(Association)

· 依赖(Dependency)

· 聚合(Aggregation)◇

· 组合(Composition)◆

· 泛化(Generalization)△

· 实现(Realization)---▷

八、实践要点

  1. 对象设计最佳实践

// 1. 优先使用组合而非继承

class Car {

private Engine engine; // 组合

// 而非 extends Engine

}

// 2. 接口编程

List<String> list = new ArrayList<>(); // 面向接口

// 3. 不可变对象设计

public final class ImmutablePoint {

private final int x;

private final int y;

public ImmutablePoint(int x, int y) {

this.x = x;

this.y = y;

}

}

  1. 测试策略

· 单元测试:针对单个类

· 集成测试:类间交互

· Mock对象:依赖隔离

九、各语言特性对比

特性 Java C++ Python JavaScript

多重继承 接口实现 支持 Mixin Prototype链

访问控制 严格 严格 约定 无

垃圾回收 有 手动/智能指针 有 有

反射 强 有限 强 强

总结

面向对象思想不仅是编程技术,更是一种思维方式。掌握这些专项知识点需要:

  1. 理解原理:不止记住语法,要理解背后的设计思想

  2. 实践验证:通过项目实践加深理解

  3. 持续重构:运用设计原则改善代码质量

  4. 模式识别:识别场景并应用合适的设计模式

记住:面向对象的终极目标是创建高内聚、低耦合、易维护、可扩展的软件系统。

相关推荐
木辰風4 小时前
PLSQL自定义自动替换(AutoReplace)
java·数据库·sql
2501_944525544 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
heartbeat..4 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
4 小时前
java关于内部类
java·开发语言
好好沉淀4 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
gusijin4 小时前
解决idea启动报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
To Be Clean Coder4 小时前
【Spring源码】createBean如何寻找构造器(二)——单参数构造器的场景
java·后端·spring
只是懒得想了4 小时前
C++实现密码破解工具:从MD5暴力破解到现代哈希安全实践
c++·算法·安全·哈希算法
lsx2024064 小时前
FastAPI 交互式 API 文档
开发语言
吨~吨~吨~5 小时前
解决 IntelliJ IDEA 运行时“命令行过长”问题:使用 JAR
java·ide·intellij-idea