面向对象编程(OOP)是Java编程语言的核心特性之一,它提供了一种组织代码的强大方式,允许开发者以更贴近现实世界的方式构建程序。Java的OOP基于三大特性:封装、继承和多态。以下是对这些特性的深入解析,以及一些实战应用实例。
1. 封装(Encapsulation)
封装是指将对象的属性(数据)和行为(操作数据的方法)捆绑在一起,形成类。封装的目的是隐藏内部实现细节,仅提供公共接口与外界交互。
1.1 类定义
在Java中,使用class
关键字定义一个类。
public class BankAccount {
private double balance; // 私有属性
public BankAccount(double initialBalance) {
balance = initialBalance;
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
balance += amount;
}
}
1.2 访问控制
Java使用访问修饰符来控制类成员的可见性,包括public
、private
、protected
和default
。
public
:可以在任何地方访问。private
:只能在类内部访问。protected
:可以在同一个包内以及子类中访问。default
(无修饰符):只能在同一个包内访问。
2. 继承(Inheritance)
继承允许一个类继承另一个类的属性和方法。这有助于代码重用和创建类层次结构。
2.1 类的继承
public class SavingsAccount extends BankAccount {
private double interestRate;
public SavingsAccount(double initialBalance, double interestRate) {
super(initialBalance); // 调用父类的构造器
this.interestRate = interestRate;
}
public void applyInterest() {
double interest = getBalance() * interestRate / 100;
deposit(interest); // 继承父类的deposit方法
}
}
2.2 多态(Polymorphism)
多态允许使用指向父类对象的引用调用子类的方法。
BankAccount account = new SavingsAccount(1000, 2.5);
account.applyInterest(); // 调用SavingsAccount类的applyInterest方法
3. 实战应用
以下是一个简单的实例,展示如何使用Java的OOP特性来设计一个简单的图书管理系统。
public class Book {
private String title;
private String author;
private int year;
public Book(String title, String author, int year) {
this.title = title;
this.author = author;
this.year = year;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public int getYear() {
return year;
}
}
public class Library {
private List<Book> books;
public Library() {
books = new ArrayList<>();
}
public void addBook(Book book) {
books.add(book);
}
public void displayBooks() {
for (Book book : books) {
System.out.println(book.getTitle() + " by " + book.getAuthor() + " (" + book.getYear() + ")");
}
}
}
public class Main {
public static void main(String[] args) {
Library library = new Library();
library.addBook(new Book("Effective Java", "Joshua Bloch", 2008));
library.addBook(new Book("Java Concurrency in Practice", "Brian Goetz", 2006));
library.displayBooks();
}
}
在这个例子中,Book
类表示一本书,Library
类管理一个书库。通过封装和继承,我们可以轻松扩展Book
类,例如创建TextBook
类继承自Book
类,并添加特定的属性和方法。
通过上述实例解析,我们可以看到Java面向对象编程的强大之处。它不仅有助于代码的重用,还提供了清晰和模块化的代码结构,使程序更容易维护和扩展。