深入理解Java中的类与对象:封装、继承与多态
大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!
在Java编程中,类与对象是核心概念。类是对象的模板,定义了对象的属性和行为;对象是类的实例,通过类创建的具体实体。本文将深入探讨Java中的类与对象,重点介绍面向对象编程的三大特性:封装、继承与多态。
一、封装
封装(Encapsulation)是将对象的状态(属性)和行为(方法)封装在一起,隐藏对象的内部实现细节,只暴露必要的接口给外界。通过封装,可以提高代码的安全性和可维护性。
代码示例:封装
package cn.juwatech.encapsulation;
public class Person {
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter 和 Setter 方法
public String getName() {
return name;
}
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");
}
}
// 显示信息的方法
public void displayInfo() {
System.out.println("姓名: " + name + ", 年龄: " + age);
}
}
在上面的示例中,Person
类通过私有属性(name
和age
)和公有方法(getter
和setter
)实现了封装。
二、继承
继承(Inheritance)是面向对象编程的一种机制,允许我们创建一个新类,这个新类可以继承一个已经存在的类的属性和方法。继承使代码重用成为可能,并提供了一个自然的层次结构。
代码示例:继承
package cn.juwatech.inheritance;
// 父类
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " 正在吃东西。");
}
public String getName() {
return name;
}
}
// 子类
package cn.juwatech.inheritance;
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void bark() {
System.out.println(getName() + " 正在汪汪叫。");
}
}
在上面的示例中,Dog
类继承了Animal
类,Dog
类不仅可以访问Animal
类的方法,还可以添加自己特有的方法(bark
)。
三、多态
多态(Polymorphism)是指同一个行为在不同对象中的不同表现形式。多态可以通过方法重载(编译时多态)和方法重写(运行时多态)来实现。
代码示例:多态
package cn.juwatech.polymorphism;
// 父类
public class Shape {
public void draw() {
System.out.println("绘制形状");
}
}
// 子类
package cn.juwatech.polymorphism;
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
package cn.juwatech.polymorphism;
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
// 测试多态
package cn.juwatech.polymorphism;
public class TestPolymorphism {
public static void main(String[] args) {
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.draw(); // 输出:绘制圆形
shape2.draw(); // 输出:绘制矩形
}
}
在上面的示例中,Shape
类的draw
方法被子类Circle
和Rectangle
重写,通过多态机制,可以使用父类引用调用子类的方法。
四、封装、继承与多态的综合应用
在实际开发中,封装、继承和多态通常是结合使用的。以下是一个综合应用的示例,展示了如何在一个简单的银行账户系统中应用这些概念。
代码示例:综合应用
package cn.juwatech.bank;
// 父类:银行账户
public class BankAccount {
private String accountNumber;
private double balance;
public BankAccount(String accountNumber, double balance) {
this.accountNumber = accountNumber;
this.balance = balance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
} else {
System.out.println("取款金额无效");
}
}
public double getBalance() {
return balance;
}
public String getAccountNumber() {
return accountNumber;
}
}
// 子类:储蓄账户
package cn.juwatech.bank;
public class SavingsAccount extends BankAccount {
private double interestRate;
public SavingsAccount(String accountNumber, double balance, double interestRate) {
super(accountNumber, balance);
this.interestRate = interestRate;
}
public void addInterest() {
double interest = getBalance() * interestRate / 100;
deposit(interest);
}
}
// 测试类
package cn.juwatech.bank;
public class TestBank {
public static void main(String[] args) {
SavingsAccount sa = new SavingsAccount("123456", 1000.0, 5.0);
sa.deposit(500);
sa.withdraw(200);
sa.addInterest();
System.out.println("余额: " + sa.getBalance()); // 输出:余额: 1365.0
}
}
在这个银行账户系统中,我们使用了封装(BankAccount
类的私有属性和公有方法)、继承(SavingsAccount
继承BankAccount
)和多态(通过父类引用调用子类方法)。