Java 面向对象编程(OOP)核心概念

Java 面向对象编程(OOP)核心概念

Java 的面向对象编程基于 「四大支柱」:封装、继承、多态和抽象。下面通过代码示例详细说明:


1. 「封装 (Encapsulation)」

将数据和方法捆绑,隐藏内部实现细节,通过公共接口访问。

arduino 复制代码
public class BankAccount {
    private String owner; // 私有属性
    private double balance;

    // 公共构造方法
    public BankAccount(String owner, double initialBalance) {
        this.owner = owner;
        this.balance = initialBalance;
    }

    // 公共访问方法 (getter/setter)
    public double getBalance() {
        return balance;
    }

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }
}

2. 「继承 (Inheritance)」

子类继承父类的属性和方法,实现代码复用。

csharp 复制代码
// 父类
class Animal {
    void eat() {
        System.out.println("Eating...");
    }
}

// 子类
class Dog extends Animal {
    void bark() {
        System.out.println("Barking...");
    }
}

// 使用
Dog dog = new Dog();
dog.eat();  // 继承自Animal
dog.bark(); // 自身方法

3. 「多态 (Polymorphism)」

同一操作作用于不同对象时产生不同行为。

typescript 复制代码
// 父类
class Shape {
    void draw() {
        System.out.println("Drawing a shape");
    }
}

// 子类
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a circle");
    }
}

class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a square");
    }
}

// 多态示例
public class Main {
    public static void main(String[] args) {
        Shape s1 = new Circle(); // 向上转型
        Shape s2 = new Square();
        
        s1.draw(); // 输出: Drawing a circle
        s2.draw(); // 输出: Drawing a square
    }
}

4. 「抽象 (Abstraction)」

隐藏复杂实现,只暴露必要接口(通过抽象类或接口)。

csharp 复制代码
// 抽象类
abstract class Vehicle {
    abstract void start(); // 抽象方法(无实现)
    
    void stop() {
        System.out.println("Vehicle stopped");
    }
}

class Car extends Vehicle {
    @Override
    void start() {
        System.out.println("Car started with key");
    }
}

// 接口 (Java 8+)
interface Electric {
    void charge();
}

class Tesla extends Vehicle implements Electric {
    @Override
    void start() {
        System.out.println("Car started via app");
    }
    
    @Override
    public void charge() {
        System.out.println("Charging battery");
    }
}

关键特性总结

概念 实现方式 核心作用
「封装」 private 属性 + public 方法 数据保护,控制访问逻辑
「继承」 extends 关键字 代码复用,层次化结构
「多态」 方法重写 + 向上转型 接口统一,扩展性强
「抽象」 abstract 类 + interface 定义规范,隐藏实现细节

高级特性

  1. 「接口默认方法 (Java 8+)」
csharp 复制代码
 interface Flyable {
     default void fly() {
         System.out.println("Default flying");
     }
 }
  1. 「静态方法与私有方法 (接口)」
csharp 复制代码
 interface MathUtils {
     static int square(int x) { return x * x; }
     private void log() { /* 内部使用 */ }
 }
  1. final 关键字」

    • final class:禁止继承
    • final method:禁止重写
    • final variable:常量

设计原则

  1. 「单一职责原则」:一个类只做一件事
  2. 「开闭原则」:对扩展开放,对修改关闭
  3. 「里氏替换」:子类必须能替换父类
  4. 「依赖倒置」:依赖抽象而非具体实现

「最佳实践」 :优先使用组合而非继承 (has-a 优于 is-a)

通过掌握这些核心概念,可以构建出模块化、可扩展且易于维护的 Java 应用程序。

相关推荐
wuminyu5 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
callJJ6 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
wbs_scy7 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
jinanwuhuaguo9 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
xmjd msup9 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
9523610 小时前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.10 小时前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-194310 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心122110 小时前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px10 小时前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋