第四章 类与对象——面向对象编程入门

一、本章知识回顾

面向对象基础概念表格
知识点 说明
类 对象的模板,描述一类事物的共同特征
对象 类的具体实例
成员变量 对象的属性(状态)
成员方法 对象的行为(功能)
构造方法 创建对象时初始化成员变量
this关键字 指向当前对象的引用
对象的组合 一个类把其他类的对象作为成员

二、为什么需要类与对象?

2.1 问题引入

假设要处理小明养的两只狗的信息:

狗名 年龄 颜色
小白 3岁 白色
小花 10岁 花色

表格转换结果
狗名 年龄 颜色
小白 3岁 白色
小花 10岁 花色
如果用之前学过的数组来处理:

String[] dog1 = {“小白”, “3”, “白色”};
String[] dog2 = {“小花”, “10”, “花色”};

AI写代码
java
运行
数组方式的问题:

数据类型不明确(年龄”3”是字符串,不方便计算)

通过下标获取信息(dog1[0]是名字,dog1[1]是年龄,容易混淆)

不能体现狗的行为(如”叫”、”跑”等)

解决方式:用类来定义狗的特征和行为,用对象来表示具体的某只狗。

三、类的定义
3.1 类的基本结构
类是Java中最基本的”模板”,用来描述一类事物的属性(成员变量)和行为(成员方法)。

java

class Dog {
// 1. 成员变量(属性)
String name; // 名字
int age; // 年龄
String color; // 颜色

// 2. 成员方法(行为)
void bark() {
    System.out.println(name + ":汪汪汪!");
}

void run() {
    System.out.println(name + "正在奔跑");
}

void showInfo() {
    System.out.println("名字:" + name + ",年龄:" + age + "岁,颜色:" + color);
}

}
3.2 成员变量
位置:在类中、方法外部定义

作用:描述对象的属性(状态)

默认值:即使不赋值,也有默认初始值

类型 默认值
int 0
double 0.0
boolean false
char ‘\u0000’
引用类型(String等) null
3.3 成员方法
位置:在类中定义

作用:描述对象的行为(功能)

结构:修饰符 + 返回值类型 + 方法名 + 参数列表 + 方法体

java

// 方法结构示例
public void bark() { // 无返回值,无参数
System.out.println(“叫”);
}

public int add(int a, int b) { // 有返回值,有参数
return a + b;
}
四、对象的创建与使用
4.1 创建对象(实例化)
使用 new 关键字 + 构造方法创建对象:

java

public class DogTest {
public static void main(String[] args) {
// 创建Dog类的对象
Dog dog1 = new Dog(); // 声明 + 创建 + 赋值

    // 或者分两步写
    Dog dog2;              // 1.声明对象变量
    dog2 = new Dog();      // 2.创建对象(分配内存)
}

}
4.2 使用对象
通过 对象名.成员变量 和 对象名.成员方法() 来访问:

java

public class DogTest {
public static void main(String[] args) {
// 创建对象
Dog dog1 = new Dog();
Dog dog2 = new Dog();

    // 给成员变量赋值
    dog1.name = "小白";
    dog1.age = 3;
    dog1.color = "白色";
    
    dog2.name = "小花";
    dog2.age = 10;
    dog2.color = "花色";
    
    // 调用成员方法
    dog1.showInfo();   // 输出:名字:小白,年龄:3岁,颜色:白色
    dog1.bark();       // 输出:小白:汪汪汪!
    
    dog2.showInfo();   // 输出:名字:小花,年龄:10岁,颜色:花色
    dog2.run();        // 输出:小花正在奔跑
}

}
运行结果:

text

名字:小白,年龄:3岁,颜色:白色
小白:汪汪汪!
名字:小花,年龄:10岁,颜色:花色
小花正在奔跑
4.3 类与对象的关系图
text

┌─────────────────────────────────────┐
│ 类(模板) │
│ ┌─────────────────────────────────┐ │
│ │ class Dog { │ │
│ │ String name; // 成员变量 │ │
│ │ int age; │ │
│ │ void bark() {…} // 方法 │ │
│ │ } │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────┘

│ 实例化(new)

┌───────────────────────┐ ┌───────────────────────┐
│ 对象1(实例1) │ │ 对象2(实例2) │
│ ┌─────────────────┐ │ │ ┌─────────────────┐ │
│ │ name = “小白” │ │ │ │ name = “小花” │ │
│ │ age = 3 │ │ │ │ age = 10 │ │
│ │ color = “白色” │ │ │ │ color = “花色” │ │
│ └─────────────────┘ │ │ └─────────────────┘ │
└───────────────────────┘ └───────────────────────┘
核心理解:

类:图纸(抽象)

对象:根据图纸造出的房子(具体)

同一个类可以创建多个对象,每个对象有自己的属性值

五、构造方法
5.1 什么是构造方法?
构造方法是专门用来创建对象时初始化成员变量的特殊方法。

特点:

方法名与类名相同

没有返回值类型(连void都不写)

创建对象时自动调用

5.2 无参构造方法
java

class Dog {
String name;
int age;

// 无参构造方法
Dog() {
    System.out.println("一只新的狗被创建了");
}

}

public class Test {
public static void main(String[] args) {
Dog dog = new Dog(); // 自动调用构造方法,输出:一只新的狗被创建了
}
}
5.3 有参构造方法
java

class Dog {
String name;
int age;
String color;

// 有参构造方法
Dog(String n, int a, String c) {
    name = n;
    age = a;
    color = c;
    System.out.println("创建了:" + name);
}

void showInfo() {
    System.out.println("名字:" + name + ",年龄:" + age + ",颜色:" + color);
}

}

public class Test {
public static void main(String[] args) {
// 创建对象时直接传入参数
Dog dog1 = new Dog(“小白”, 3, “白色”);
Dog dog2 = new Dog(“小花”, 10, “花色”);

    dog1.showInfo();  // 名字:小白,年龄:3,颜色:白色
    dog2.showInfo();  // 名字:小花,年龄:10,颜色:花色
}

}
5.4 注意事项
情况 说明
没有定义任何构造方法 系统自动提供无参构造方法
定义了有参构造方法 系统不再提供无参构造方法
想同时使用两种 需要重载构造方法(手动写两个)
六、this关键字
6.1 解决命名冲突
当成员变量和局部变量(包括参数)同名时,this.成员变量 表示成员变量。

java

class Dog {
String name;
int age;

// 参数名和成员变量名相同
Dog(String name, int age) {
    this.name = name;  // this.name 是成员变量,name 是参数
    this.age = age;
}

void showInfo() {
    System.out.println("名字:" + name + ",年龄:" + age);
}

}
为什么需要this?

如果不写this,会发生”局部变量覆盖成员变量”:

java

// 错误写法
Dog(String name, int age) {
name = name; // 左边和右边都是参数name,成员变量name没有被赋值
age = age; // 同样的问题
}
6.2 this的其他用法
java

class Dog {
String name;

Dog() {
    this("无名");  // 调用本类的有参构造方法
}

Dog(String name) {
    this.name = name;
}

}
七、对象的组合
一个类可以把其他类的对象作为自己的成员变量,这叫对象的组合。

示例:人养狗
java

// 狗类
class Dog {
String name;
int age;

Dog(String name, int age) {
    this.name = name;
    this.age = age;
}

void bark() {
    System.out.println(name + ":汪汪!");
}

}

// 人类(组合了Dog类)
class Person {
String name;
Dog pet; // 把Dog对象作为成员变量

Person(String name, Dog pet) {
    this.name = name;
    this.pet = pet;
}

void walkPet() {
    System.out.println(name + "正在遛 " + pet.name);
    pet.bark();
}

void showInfo() {
    System.out.print(name + "的宠物:");
    System.out.println("名字:" + pet.name + ",年龄:" + pet.age + "岁");
}

}

public class Test {
public static void main(String[] args) {
// 先创建狗
Dog dog = new Dog(“小白”, 3);

    // 再创建人(把狗作为参数传入)
    Person person = new Person("小明", dog);
    
    person.showInfo();   // 小明的宠物:名字:小白,年龄:3岁
    person.walkPet();    // 小明正在遛小白 \n 小白:汪汪!
}

}
运行结果:

text

小明的宠物:名字:小白,年龄:3岁
小明正在遛小白
小白:汪汪!
八、完整示例:有理数类(教材例题)
根据教材第4章的有理数类例题,以下是一个完整的封装示例:

java

/**

  • 有理数类(封装分数)

  • 成员变量:分子、分母

  • 成员方法:加法、减法、乘法、除法、化简
    */
    class Rational {
    int numerator; // 分子
    int denominator; // 分母

    // 构造方法
    Rational(int numerator, int denominator) {
    this.numerator = numerator;
    this.denominator = denominator;
    reduce(); // 创建时自动化简
    }

    // 求最大公约数(用于化简)
    int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
    }

    // 化简分数
    void reduce() {
    int g = gcd(numerator, denominator);
    numerator /= g;
    denominator /= g;
    }

    // 加法
    Rational add(Rational r) {
    int newNum = this.numerator * r.denominator + r.numerator * this.denominator;
    int newDen = this.denominator * r.denominator;
    return new Rational(newNum, newDen);
    }

    // 减法
    Rational subtract(Rational r) {
    int newNum = this.numerator * r.denominator - r.numerator * this.denominator;
    int newDen = this.denominator * r.denominator;
    return new Rational(newNum, newDen);
    }

    // 输出分数
    void display() {
    if (denominator == 1) {
    System.out.println(numerator);
    } else {
    System.out.println(numerator + “/“ + denominator);
    }
    }

}

public class RationalTest {
public static void main(String[] args) {
Rational r1 = new Rational(1, 3); // 1/3
Rational r2 = new Rational(2, 5); // 2/5

    System.out.print("1/3 + 2/5 = ");
    r1.add(r2).display();                // 11/15
    
    System.out.print("1/3 - 2/5 = ");
    r1.subtract(r2).display();           // -1/15
}

}
九、常见错误与注意点
错误写法 正确写法 说明
Dog dog; dog.name = “小白”; Dog dog = new Dog(); 必须先创建对象才能使用
class dog { … } class Dog { … } 类名首字母大写(规范)
构造方法写了返回值类型 Dog() { }(无void) 构造方法不能有返回值
this 在静态方法中使用 只能在非静态方法中使用 static方法中不能用this
忘记写构造方法导致无法初始化 提供合适的构造方法 或使用setter方法赋值
十、小结
本章学习了:

类的定义:成员变量 + 成员方法

对象的创建:使用 new 关键字

构造方法:与类同名,无返回值,用于初始化

this关键字:区分成员变量和局部变量

对象的组合:一个类包含其他类的对象

核心代码模板:

java

class 类名 {
// 1. 成员变量
数据类型 变量名;

// 2. 构造方法
类名(参数列表) {
    this.成员变量 = 参数;
}

// 3. 成员方法
返回值类型 方法名(参数列表) {
    // 方法体
}

}

// 使用
类名 对象名 = new 类名(参数);
对象名.方法名();

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2026 Shipanxs
  • 访问人数: | 浏览次数:

如果这篇文章对你有帮助,可以请我喝杯茶

支付宝

支付宝扫一扫