编者:之前对JAVA的基础语法,面向对象编程基础进行了介绍,但这方面内容是面向对象的核心,理解OOP概念需要一定时间,所以,我们对这块内容细化进行子主题介绍。
一、类的基本概念
在Java中,类的定义包括以下几个部分:
-
类的声明:使用
class
关键字定义一个类。 -
属性(字段):类的状态或特征,通常用变量表示。
-
方法:类的行为或功能,通常用函数表示。
-
构造函数:用于创建对象的特殊方法。
二、类的定义示例
示例 1:简单的类定义
代码示例:
// 定义一个简单的类 Car
public class Car {// 属性(字段)String color; // 颜色String model; // 型号int year; // 年份// 构造函数public Car(String color, String model, int year) {this.color = color; // 使用参数初始化属性this.model = model;this.year = year;}// 方法:显示汽车信息public void displayInfo() {System.out.println("Car Model: " + model);System.out.println("Car Color: " + color);System.out.println("Car Year: " + year);}
}// 主类,用于测试 Car 类
public class Main {public static void main(String[] args) {// 创建 Car 类的对象Car myCar = new Car("Red", "Toyota", 2020);// 调用方法显示汽车信息myCar.displayInfo();}
}
代码解释:
-
类的声明:
public class Car
定义了一个名为Car
的类。 -
属性:
String color
、String model
和int year
是Car
类的属性,分别表示汽车的颜色、型号和年份。 -
构造函数:
public Car(String color, String model, int year)
是构造函数,用于初始化新创建的对象的属性。this
关键字用于区分类的属性和构造函数的参数。 -
方法:
public void displayInfo()
是一个方法,用于输出汽车的信息。 -
对象创建:在
Main
类的main
方法中,使用new Car("Red", "Toyota", 2020)
创建了一个Car
对象,并调用displayInfo
方法显示汽车信息。
三、类的进一步扩展
在实际应用中,类可以更加复杂,包含更多的功能和特性。下面我们将介绍一些常见的扩展特性。
1. 方法重载
方法重载是指在同一个类中,可以定义多个同名但参数不同的方法。
示例 2:方法重载
public class Calculator {// 加法:两个整数public int add(int a, int b) {return a + b;}// 加法:三个整数public int add(int a, int b, int c) {return a + b + c;}// 加法:两个浮点数public double add(double a, double b) {return a + b;}
}// 主类,用于测试 Calculator 类
public class Main {public static void main(String[] args) {Calculator calc = new Calculator();// 调用不同的 add 方法System.out.println("Add two integers: " + calc.add(5, 10));System.out.println("Add three integers: " + calc.add(5, 10, 15));System.out.println("Add two doubles: " + calc.add(5.5, 10.5));}
}
代码解释:
-
Calculator
类中定义了三个add
方法,分别处理不同数量和类型的参数。 -
在
Main
类中,创建Calculator
对象并调用不同的add
方法,展示了方法重载的使用。
2. 继承
继承是OOP的重要特性,允许一个类继承另一个类的属性和方法,从而实现代码重用。
示例 3:继承
// 基类
public class Vehicle {String brand; // 品牌public Vehicle(String brand) {this.brand = brand;}public void honk() {System.out.println("Beep! Beep!");}
}// 派生类
public class Bike extends Vehicle {int gears; // 齿轮数public Bike(String brand, int gears) {super(brand); // 调用基类构造函数this.gears = gears;}public void displayInfo() {System.out.println("Bike Brand: " + brand);System.out.println("Number of Gears: " + gears);}
}// 主类,用于测试 Bike 类
public class Main {public static void main(String[] args) {Bike myBike = new Bike("Giant", 21);// 调用方法myBike.honk(); // 继承的方法myBike.displayInfo(); // 自己的方法}
}
代码解释:
-
Vehicle
类是基类,包含品牌和喇叭的方法。 -
Bike
类继承自Vehicle
类,增加了gears
属性和displayInfo
方法。 -
在
Main
类中,创建Bike
对象,调用继承自Vehicle
的honk
方法和Bike
类自己的displayInfo
方法。
3. 封装
封装是OOP的另一个重要特性,通过访问修饰符控制对类属性和方法的访问。
示例 4:封装
public class Account {// 私有属性private String accountNumber;private double balance;// 构造函数public Account(String accountNumber) {this.accountNumber = accountNumber;this.balance = 0.0; // 初始余额为0}// 公共方法:存款public void deposit(double amount) {if (amount > 0) {balance += amount;System.out.println("Deposited: " + amount);} else {System.out.println("Deposit amount must be positive.");}}// 公共方法:取款public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;System.out.println("Withdrew: " + amount);} else {System.out.println("Insufficient funds or invalid amount.");}}// 公共方法:查看余额public double getBalance() {return balance;}
}// 主类,用于测试 Account 类
public class Main {public static void main(String[] args) {Account myAccount = new Account("123456789");myAccount.deposit(1000);System.out.println("Current Balance: " + myAccount.getBalance());myAccount.withdraw(500);System.out.println("Current Balance: " + myAccount.getBalance());myAccount.withdraw(600); // 尝试取款超过余额}
}
代码解释:
-
Account
类的属性accountNumber
和balance
被声明为私有,外部无法直接访问。 -
提供公共方法
deposit
、withdraw
和getBalance
来操作账户余额,确保了数据的安全性。 -
在
Main
类中,创建Account
对象并调用公共方法,展示了封装的效果。