Java 面向对象编程(OOP)


面向对象编程(Object-Oriented Programming, OOP)是 Java 语言的核心思想之一。OOP 提供了一种以对象为中心的编程方式,使得代码更加模块化、可重用且易于维护。本模块将介绍 Java 中的 OOP 基本概念,包括 类与对象、继承、封装、多态,并通过代码示例帮助你掌握这些核心概念。

1. 类与对象
类(Class)是对象的模板或蓝图,它定义了对象的属性和行为。对象(Object)是类的实例,是类的具体实现。

1.1 类的定义
类是 Java 程序的基本组成部分,用于定义对象的属性和行为。

示例:

public class Car {
    // 属性(成员变量)
    String color;
    int speed;
 
    // 方法(行为)
    void start() {
        System.out.println("汽车启动");
    }
 
    void stop() {
        System.out.println("汽车停止");
    }
}


在这个例子中,Car 类有两个属性:color 和 speed,以及两个方法:start() 和 stop()。

1.2 对象的创建与使用
通过 new 关键字可以创建类的对象,然后通过对象调用类的方法或访问属性。

示例:

public class Main {
    public static void main(String[] args) {
        // 创建 Car 类的对象
        Car myCar = new Car();
        myCar.color = "红色";
        myCar.speed = 100;
 
        // 调用对象的方法
        myCar.start();
        System.out.println("汽车颜色: " + myCar.color);
        myCar.stop();
    }
}


在这个例子中,我们创建了 Car 类的对象 myCar,并设置了属性 color 和 speed,然后调用了 start() 和 stop() 方法。

2. 封装
封装(Encapsulation)是一种将数据和操作数据的方法捆绑在一起的机制,目的是隐藏类的内部细节,只对外暴露必要的接口。这有助于提高代码的安全性和可维护性。

2.1 访问修饰符
Java 提供了访问修饰符来实现封装:

public:类、方法或属性对所有代码可见。

private:类的成员只能在该类内部访问,无法从外部访问。

protected:类的成员可以被同一包中的其他类或其子类访问。

默认(无修饰符):类的成员可以被同一包中的其他类访问。

2.2 使用 Getter 和 Setter 方法
为了实现封装,我们通常将属性设置为 private,并通过 public 的 getter 和 setter 方法来访问和修改属性。

示例:

public class Person {
    // 私有属性
    private String name;
    private int age;
 
    // Getter 方法
    public String getName() {
        return name;
    }
 
    // Setter 方法
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        if (age > 0) {
            this.age = age;
        } else {
            System.out.println("年龄必须大于 0");
        }
    }
}

在这个例子中,name 和 age 是私有的,外部不能直接访问它们。通过 getName() 和 setName(),可以安全地访问和修改 name。

3. 继承
继承(Inheritance)是面向对象编程的重要特性,用于创建一个新类,该新类可以继承现有类的属性和方法。通过继承,可以实现代码重用。

3.1 继承的基本用法
extends 关键字用于声明一个类继承另一个类。

父类(超类):被继承的类。

子类:继承父类的类。

示例:

// 父类
public class Animal {
    void eat() {
        System.out.println("动物在吃东西");
    }
}
 
// 子类
public class Dog extends Animal {
    void bark() {
        System.out.println("狗在叫");
    }
}
 
public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.eat();  // 调用继承自父类的方法
        myDog.bark(); // 调用子类的方法
    }
}

在这个例子中,Dog 类继承了 Animal 类,因此 Dog 类可以使用 Animal 类的 eat() 方法。

3.2 方法重写
方法重写(Method Overriding)是子类提供对从父类继承的方法的具体实现。

使用 @Override 注解标记重写的方法。

子类可以提供自己的实现来覆盖父类的方法。

示例:

public class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("狗在吃狗粮");
    }
}


在这个例子中,Dog 类重写了 Animal 类的 eat() 方法。

4. 多态
多态(Polymorphism)是 OOP 的另一个重要特性,它允许相同的操作作用于不同的对象。多态的实现有两种方式:编译时多态(方法重载)和运行时多态(方法重写)。

4.1 编译时多态(方法重载)
方法重载(Method Overloading)是在同一个类中定义多个方法,这些方法具有相同的名字,但参数不同(参数类型或参数个数不同)。

示例:

public class MathUtils {
    // 方法重载
    int add(int a, int b) {
        return a + b;
    }
 
    double add(double a, double b) {
        return a + b;
    }
}


在这个例子中,add() 方法被重载了,分别用于处理整数和浮点数的相加。

4.2 运行时多态(方法重写)
运行时多态通过方法重写实现,父类的引用可以指向子类的对象,调用的方法根据引用指向的对象类型来确定。

示例:

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog();  // 父类引用指向子类对象
        myAnimal.eat();  // 调用 Dog 类的 eat() 方法
    }
}


在这个例子中,虽然 myAnimal 的类型是 Animal,但它指向 Dog 对象,因此调用的是 Dog 类的 eat() 方法。

5. 面向对象编程的优势
模块化:将功能封装在类中,使代码更加模块化。

代码重用:通过继承和组合可以重用已有的代码。

灵活性和可维护性:通过多态和接口,可以更灵活地扩展代码,提高可维护性。

总结与后续
在本模块中,我们学习了 Java 的面向对象编程概念,包括类与对象、封装、继承和多态。这些概念是 Java 编程的重要基础,使得代码更加结构化和可维护。

在下一模块中,我们将深入探讨 Java 中的 抽象类 和 接口,学习如何通过抽象和接口提高代码的灵活性和复用性,进一步掌握 Java 的面向对象特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值