Java 面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它将程序设计围绕“对象”这一概念展开。对象是类的实例,包含了数据(属性)和操作数据的方法(行为)。Java 作为一种面向对象的语言,提供了丰富的语法和特性来支持面向对象编程。本文主要介绍一下OOP、面向对象中的类和对象的理解、面向对象三大特性。

1、OOP简介

OOP代表面向对象编程。

面向过程编程是编写对数据执行操作的过程或方法,而面向对象的编程是创建包含数据和方法的对象。

面向对象的程序设计比面向过程程序设计具有以下优点:

1) 结构清晰,程序是模块化和结构化,更加符合人类的思维方式;

2) 易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;

3) 易维护,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活,更易于维护,系统低耦合的特点有利于减少程序的后期维护工作量。

2、Java 类和对象

类和对象是面向对象编程的两个主要方面。

查看下面示例,以了解类和对象之间的区别:

类(class)

对象(object)

哈士奇

金毛

泰迪

水果

苹果

香焦

草莓

如上面示例,类是对象的模板,而对象是类的实例。

创建单个对象时,它们将从类继承所有变量和方法。

3、Java 面向对象三大特性

Java面向对象编程有三大特性,它们是封装、继承和多态。

封装:

将类封装起来,只提供想提供的方法接口,而不需要提供具体实现细节,这样一来使得程序更加健壮。  另一方面比方说项目做到一半换人了,老板现在要求吧代码改了,有了封装之后,你完全不用管前人写的烂代码,只需要给出必须的接口方法,就可以自己写自己的了,修改方便。

继承:

继承很明显就是从一个已有的类那得到一些东西,能够很好的实现代码的重用性。被继承的类称之为父类或者超类,继承父类的类称为子类。Java中所有类都是Object类的子类。另外Java中只允许单继承,这样一来避免了多继承带来的代码过度耦合的问题。虽然不能多继承,但是Java中可以实现多个接口,来实现功能的扩展。

多态:

指的是子类对象可以赋值给父类变量,但运行是仍表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可以表现出多种行为特征。简单来说,就是程序中同名的不同方法。

4、面向对象编程的优势

通过继承和多态,可以实现代码的重用,减少重复代码,提高开发效率。面向对象编程将程序划分为独立的对象,每个对象负责特定的功能。这种模块化的设计有助于提高代码的可读性和可维护性。封装可以隐藏对象的内部实现细节,只暴露必要的接口给外部使用。这有助于提高代码的安全性和可维护性。通过多态和继承,可以轻松地扩展和修改系统的功能,而不需要对现有代码进行大量修改。

import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Employee employee = new Employee("001", "Alice");
        employee.work();

        Manager manager = new Manager("002", "Bob");
        manager.work();
        manager.manage();
    }
}

// 定义一个 Employee 类
class Employee {
    private String id;
    private String name;

    public Employee(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getName() {
        return this.name;  // 添加一个 getter 方法来访问 name
    }

    public void work() {
        System.out.println(this.name + " is working.");
    }
}

// 定义一个 Manager 类,继承自 Employee 类
class Manager extends Employee {
    private List<Employee> subordinates;

    public Manager(String id, String name) {
        super(id, name);
        this.subordinates = new ArrayList<>();
    }

    public void manage() {
        System.out.println(getName() + " is managing."); 
    }
}

推荐文档