Bootstrap

【Java】类和对象篇

面向对象概述

面向对象的基本概念

  1. 对象(Object)
    • 定义:对象是现实世界中实体的抽象,具有状态(属性)和行为(方法)。
    • 特点:
      • 状态:描述对象的静态特征(如汽车的品牌、颜色)。
      • 行为:描述对象的动态特征(如汽车的启动、加速)。

示例:

// 定义一个汽车对象
Car myCar = new Car();
myCar.brand = "Toyota";  // 状态
myCar.start();           // 行为
  1. 类(Class)
    • 定义:类是对象的模板,描述一类对象的共同特征和行为。
    • 关系:类是抽象,对象是类的实例。

示例:

// 定义汽车类
public class Car {
   
    // 状态(成员变量)
    String brand;
    int speed;

    // 行为(方法)
    void start() {
   
        System.out.println("Car is starting...");
    }
}
  1. 消息传递
    • 定义:对象之间通过方法调用进行交互,包含接收对象、方法名和参数。

示例:

class Calculator {
   
    int add(int a, int b) {
   
        return a + b;
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        Calculator cal = new Calculator();
        int result = cal.add(3, 5); // 消息传递:调用add方法
        System.out.println("结果:" + result); // 输出:8
    }
}

面向对象的基本特征

  1. 封装(Encapsulation)
    • 核心思想:隐藏内部细节,通过公共接口访问数据。
    • 实现方式:
      • 使用 private 保护成员变量。
      • 通过 public 的 getter 和 setter 方法操作数据。

示例:

class BankAccount {
   
    private double balance;

    public void deposit(double amount) {
   
        if (amount > 0) {
   
            balance += amount;
            System.out.println("存款成功,余额:" + balance);
        }
    }

    public void withdraw(double amount) {
   
        if (amount > 0 && amount <= balance) {
   
            balance -= amount;
            System.out.println("取款成功,余额:" + balance);
        }
    }
}
  1. 继承(Inheritance)
    • 核心思想:子类继承父类的属性和方法,实现代码复用。
    • 语法:使用 extends 关键字。

示例:

class Animal {
   
    String name;
    void eat() {
   
        System.out.println(name + "在吃东西");
    }
}

class Dog extends Animal {
   
    void bark() {
   
        System.out.println(name + "汪汪叫");
    }
}

// 使用继承类
public class Main {
   
    public static void main(String[] args) {
   
    	Dog myDog = new Dog();
		myDog.name = "多多";
		myDog.eat(); // 调用父类方法
		myDog.bark(); // 调用子类特有方法
    }
}
  1. 多态(Polymorphism)
    • 核心思想:同一方法在不同场景下有不同实现。
    • 实现方式:
      • 方法重载:同一类中同名方法参数不同。
      • 方法覆盖:子类重写父类方法。

示例:

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

// 方法覆盖
class Animal {
   
    String name;
    void eat() {
   
        System.out.println(name + "在吃东西");
    }
}
class Cat extends Animal {
   
    @Override
    void eat() {
   
        System.out.println("猫吃鱼");
    }
}

面向对象编程(OOP)的优势

易维护: 封装和继承使得代码结构更加清晰,各个模块之间的耦合度降低,当需要修改某个功能时,只需要修改相关的类和方法,而不会影响到其他部分的代码。
可重用: 通过继承和组合,可以复用已有的类和方法,减少代码的重复编写,提高开发效率。
可扩展: 多态性使得代码具有良好的扩展性,当需要添加新的功能或类型时,只需要创建新的子类并实现相应的方法即可,而不需要修改现有的代码。

类的定义与对象操作

类的定义

类声明:

[访问修饰符] [修饰符] class 类名 [extends 父类名] [implements 接口名列表] {
   
    // 类体
}

类声明包含访问修饰符(如 public 或缺省)、类名、继承信息(使用 extends 关键字)和实现接口信息(使用 implements 关键字)。如果没有指定继承的类,默认继承自 Object 类。例如以下代码示例:

// 公共类,可被其他包中的类访问
public class MyClass {
   
    // 类体
}

// 缺省访问修饰符,只能在同一个包中访问
class AnotherClass {
   
    // 类体
}

// 继承自 MyClass 类
class SubClass extends MyClass {
   
    // 类体
}

类体的定义:
类体包含构造方法、成员变量和成员方法。
成员变量:
成员变量也称为属性,用于存储类或对象的状态信息。
语法:[访问修饰符] [修饰符] 数据类型 变量名 [= 初始值];
说明:

  • 访问修饰符:如 public、private、protected 或默认(无修饰符),用于控制成员变量的访问权限。
  • 修饰符:例如 static(静态变量,属于类而不是对象)、final(常量,值不可变)等。
  • 数据类型:可以是基本数据类型(如 int、double 等)或引用数据类型(如 String、自定义类等)。
  • 初始值:可选,用于在声明变量时为其赋初始值。

构造方法:
构造方法用于创建类的对象,并对对象的成员变量进行初始化。
语法:

[访问修饰符] 类名(参数列表) {
   
    // 构造方法体
}

说明:

  • 访问修饰符:控制构造方法的访问权限。
  • 类名:构造方法的名称必须与类名相同。
  • 参数列表:可以包含零个或多个参数,用于接收创建对象时传递的值。
  • this 关键字:用于引用当前对象,在构造方法中可用于区分成员变量和局部变量。

成员方法:
成员方法用于定义类的行为,实现特定的功能。
语法:

[访问修饰符] [修饰符] 返回值类型 方法名(参数列表) {
   
    // 方法体
    [return 返回值;]
}

说明:

  • 访问修饰符:控制方法的访问权限。
  • 修饰符:如 static(静态方法,属于类而不是对象)、final(最终方法,不能被重写)等。
  • 返回值类型:指定方法返回值的数据类型,如果方法不返回任何值,则使用 void。
  • 方法名:遵循 Java 命名规范,通常采用小驼峰命名法。
  • 参数列表:可以包含零个或多个参数,用于接收调用方法时传递的值。
  • return 语句:用于从方法中返回一个值,返回值的类型必须与方法声明的返回值类型一致。

以下是一个 Car 类的类声明以及类体定义的代码示例:

public class Car {
   
    private String brand;
    private int wheels;

    public Car(String brand, int wheels) {
   
        this.brand = brand;
        this.wheels = wheels;
    }

    // 成员方法,无返回值,打印汽车信息
    public void displayInfo() {
   
        System.out.println("Brand: " + brand + ", Wheels: " + wheels);
    }

    // 成员方法,有返回值,返回轮子数量
    public int getWheels() {
   
        return wheels;
    }
}

对象的创建与使用

对象创建:
对象创建有两种格式,以上面的 Car 类为例:

  1. 先声明对象的引用,然后使用 new 关键字实例化对象。
Car car;
car = new Car();
  1. 声明对象的引用的同时使用 new 关键字实例化对象。(推荐这种格式)
Car car = new Car();

访问成员:
使用点号运算符(.)访问类的成员变量和调用成员方法。以下是一个对象 rectangle 访问 Rectangle 类中成员变量以及调用成员方法的代码示例:

class Rectangle {
   
    double length;
    double width;

    public double getArea() {
   
        return length * width;
    }
    
    public static void main(String[] args) {
   
        Rectangle rectangle = new Rectangle();
        rectangle.length = 5;// 通过( .成员变量 )来定义成员变量
        rectangle.width = 3;
        double area = rectangle.getArea();// 通过( .成员方法 )来访问成员方法
        System.out.println("矩形的长是:" + rectangle.
;