Java进阶——面向对象编程

本篇文章,将深入探讨 Java 面向对象编程的关键知识点,并用一些例子展示这些概念的实际工作开发中的应用。

本文目录

    • [一、 三大特性](#一、 三大特性)
      • [1. 封装](#1. 封装)
      • [2. 继承](#2. 继承)
      • [3. 多态](#3. 多态)
    • [二、 类与对象](#二、 类与对象)
      • [1. 对象创建](#1. 对象创建)
      • [2. 构造方法](#2. 构造方法)
      • [3. 静态成员](#3. 静态成员)
    • [三、 访问控制修饰符](#三、 访问控制修饰符)
    • 四、方法相关
      • [1. 方法签名](#1. 方法签名)
      • [2. final 关键字](#2. final 关键字)
      • [3. 可变参数](#3. 可变参数)
    • 五、对象生命周期
    • [六、 高级特性](#六、 高级特性)
      • [1. 接口和抽象类](#1. 接口和抽象类)
      • [2. 内部类](#2. 内部类)
      • [3. 枚举类](#3. 枚举类)
    • [七、 对象关系](#七、 对象关系)
      • [1. 组合](#1. 组合)
      • [2. 聚合](#2. 聚合)
    • 总结

一、 三大特性

1. 封装

封装是指隐藏对象的内部细节,通过 private 关键字控制对对象属性的访问,并提供 public 的 getter/setter 方法来实现对属性的安全访问和修改。

java 复制代码
public class User {
    private String password;

    public void setPassword(String input) {
        if (isValidPassword(input)) {
            this.password = encrypt(input);
        }
    }

    private boolean isValidPassword(String input) {
        // 密码验证逻辑
        return input.length() >= 6;
    }

    private String encrypt(String input) {
        // 加密逻辑
        return "encrypted_" + input;
    }
}

getter/setter里面可以做一些简单的逻辑

2. 继承

Java 中的继承通过 extends 关键字实现,一个类只能继承一个父类。子类可以重写父类的方法,通过 @Override 注解显式声明。

java 复制代码
// 父类
class Animal {
    public void sound() {
        System.out.println("sound");
    }
}

// 子类
class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("barks");
    }
}


public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog(); 
        animal.sound();             
    }
}

3. 多态

多态分为编译时多态和运行时多态。编译时多态通过方法重载实现,运行时多态通过父类引用指向子类对象实现。

java 复制代码
// 方法重载
class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

// 运行时多态
class Animal {
    public void sound() {
        System.out.println("sound");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();  
        animal.sound();             
    }
}

二、 类与对象

1. 对象创建

使用 new 关键字触发构造方法调用,对象内存分配在堆中,引用变量存储在栈中。

java 复制代码
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John");
        System.out.println(person.name);
    }
}

2. 构造方法

构造方法与类同名,无返回类型,可以重载多个构造器。默认构造器在类未定义任何构造器时自动生成。

java 复制代码
class Car {
    private String brand;

    // 默认构造器
    public Car() {
        this.brand = "Unknown";
    }

    // 带参数的构造器
    public Car(String brand) {
        this.brand = brand;
    }

    public String getBrand() {
        return brand;
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car("Toyota");
        System.out.println(car1.getBrand());
        System.out.println(car2.getBrand());
    }
}

3. 静态成员

static 修饰的属性和方法属于类级别,通过类名直接访问。静态方法不能访问非静态成员(无 this 上下文)。

java 复制代码
class MathUtils {
    public static final double PI = 3.14159;

    public static double circleArea(double radius) {
        return PI * radius * radius;
    }
}

public class Main {
    public static void main(String[] args) {
        double area = MathUtils.circleArea(5);
        System.out.println(area);
    }
}

三、 访问控制修饰符

Java 提供了四种访问控制修饰符:private默认protectedpublic

修饰符 类内部 同包 子类 其他包
private
默认
protected
public

四、方法相关

1. 方法签名

方法签名由方法名 + 参数列表组成(返回类型和异常不属于签名)。

2. final 关键字

final 可以修饰类(不可继承)、方法(不可重写)、变量(常量)。

java 复制代码
final class FinalClass {
    // final 方法
    public final void finalMethod() {
        System.out.println("Final method");
    }
}

public class Main {
    public static void main(String[] args) {
        final int MAX_VALUE = 100;
        // MAX_VALUE = 200; // 编译错误,final 变量不可修改
    }
}

3. 可变参数

java 复制代码
public class Main {
    public void printItems(String... items) {
        for (String item : items) {
            System.out.println(item);
        }
    }

    public static void main(String[] args) {
        Main main = new Main();
        main.printItems("1", "2", "3");
    }
}

五、对象生命周期

对象的生命周期包括创建、使用和销毁三个阶段。对象由 new 关键字实例化,使用引用操作对象,最后由垃圾回收器自动回收无引用对象。

六、 高级特性

1. 接口和抽象类

特性 接口 抽象类
实现方式 implements extends
方法实现 Java 8+ 支持默认方法 可包含具体方法
成员变量 默认 public static final 无限制
多继承 支持多接口继承 单继承

2. 内部类

Java 中有四种内部类:成员内部类、静态内部类、局部内部类和匿名内部类。

java 复制代码
// 成员内部类
class OuterClass {
    private int outerField;

    class InnerClass {
        public void accessOuterField() {
            System.out.println(outerField);
        }
    }
}

// 静态内部类
class OuterClass2 {
    private static int staticOuterField;

    static class StaticInnerClass {
        public void accessStaticOuterField() {
            System.out.println(staticOuterField);
        }
    }
}

// 局部内部类
class OuterClass3 {
    public void outerMethod() {
        final int localVariable = 10;
        class LocalInnerClass {
            public void accessLocalVariable() {
                System.out.println(localVariable);
            }
        }
        LocalInnerClass inner = new LocalInnerClass();
        inner.accessLocalVariable();
    }
}

// 匿名内部类
class Main {
    public static void main(String[] args) {
        Runnable task = new Runnable() {
            @Override
            public void run() {
                System.out.println("Task running");
            }
        };
        new Thread(task).start();
    }
}

3. 枚举类

使用 enum 关键字定义枚举类,自动继承 java.lang.Enum

java 复制代码
public enum OrderStatus {
    PENDING("待处理"), PAID("已支付");
    private String desc;
    OrderStatus(String desc) { this.desc = desc; }

    public String getDesc() {
        return desc;
    }
}

public class Main {
    public static void main(String[] args) {
        OrderStatus status = OrderStatus.PENDING;
        System.out.println(status.getDesc());
    }
}

七、 对象关系

1. 组合

组合是一种强关联关系,整体与部分的生命周期一致。

java 复制代码
class Engine {
    public void start() {
        System.out.println("Engine started");
    }
}

class Car {
    private Engine engine = new Engine();

    public void startCar() {
        engine.start();
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.startCar();
    }
}

2. 聚合

聚合是一种弱关联关系,整体与部分可以独立存在。

java 复制代码
class Student {
    private String name;

    public Student(String name) {
        this.name = name;
    }
}

class Classroom {
    private List<Student> students;

    public Classroom(List<Student> students) {
        this.students = students;
    }
}

public class Main {
    public static void main(String[] args) {
        Student student1 = new Student("Alice");
        Student student2 = new Student("Bob");
        List<Student> students = List.of(student1, student2);
        Classroom classroom = new Classroom(students);
    }
}

总结

面向对象编程的核心在于理解类与对象的关系。

|----------------------------------------------------------------------------------------------------------|--------------------|-------------------------------------------------------------------------------------------------|
| ← 上一篇 Java进阶------Stream流以及常用方法详解 | 记得点赞、关注、收藏哦! | 下一篇 Java进阶------注解一文全懂 → |

相关推荐
fake_ss1986 分钟前
计算机网络基础(二) --- TCP/IP网络结构(应用层)
java·网络·网络协议·计算机网络·信息与通信
北京_宏哥10 分钟前
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-30- 操作单选和多选按钮 - 番外篇(详细教程)
java·前端·测试
poemyang11 分钟前
Hello World背后藏着什么秘密?一行代码看懂Java的“跨平台”魔法
java·java虚拟机·编译原理·java字节码
lifallen14 分钟前
Java stream 并发问题
java·开发语言·数据结构·算法
你的电影很有趣17 分钟前
lesson28:Python单例模式全解析:从基础实现到企业级最佳实践
开发语言·python
ffutop21 分钟前
剖析 GraalVM Native Image 技术
java
三口吃掉你25 分钟前
【IDEA】JavaWeb自定义servlet模板
java·servlet·intellij-idea
Shun_Tianyou39 分钟前
Python Day19 时间模块 和 json模块 及例题分析
java·服务器·前端
颜挺锐1 小时前
Java 课程,每天解读一个简单Java之水仙花数
java·开发语言
t198751281 小时前
C# CAN通信上位机系统设计与实现
开发语言·c#