Java的面向对象编程具有多态性,可以通过对父类的引用调用子类的方法。以下是讲解Java面向对象程序设计多态性示例的完整攻略。
1. 理解多态性
在面向对象编程中,多态性可以指同一个实体可以被不同方式解释的能力,多态性的实现方式通常是通过继承、方法重载和重写等方式。在Java中,我们经常会用到继承和方法重写,这两种特性可以实现多态性。
2. 示例一:动态绑定
动态绑定是多态性的一种实现方式,它可以根据对象的运行时类型来调用方法。下面是一个示例:
class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
class Dog extends Animal {
public void move() {
super.move(); // 调用父类的方法
System.out.println("狗可以跑和走");
}
}
public class TestDog {
public static void main(String[] args) {
Animal animal = new Animal(); // Animal 对象
Animal dog = new Dog(); // Dog 对象
animal.move(); // 执行 Animal 类的方法
dog.move(); // 同样是调用 Dog 类的方法
}
}
以上代码中,我们声明了一个Animal类和一个Dog类,Dog类继承了Animal类。在Animal类中,我们声明了一个方法move()
,表示动物可以移动。在Dog类中,我们重写了move()
方法,并且在其中调用了父类的move()
方法并添加了一些狗特有的行为。
在TestDog类中,我们实例化了一个Animal类对象和一个Dog类对象。我们分别调用了它们的move()
方法。这时就体现了动态绑定的特性,dog.move()
调用的是子类Dog的move()
方法,而不是父类Animal的move()
方法。
3. 示例二:基于参数多态
Java还支持基于参数的多态性。这就是说,我们可以编写一个方法,该方法可以接受不同类型的参数,而且能够自动匹配参数类型,并调用相应的方法。下面是一个示例:
class Customer {
private String name;
public Customer(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Account {
private Customer customer;
private double balance;
public Account(Customer customer, double balance) {
this.customer = customer;
this.balance = balance;
}
public Customer getCustomer() {
return customer;
}
public double getBalance() {
return balance;
}
}
class Bank {
public void deposit(Account account, double amount) {
account.balance += amount;
System.out.println("Deposit successful.\nBalance: " + account.getBalance());
}
}
public class TestBank {
public static void main(String[] args) {
Customer customer = new Customer("John Smith");
Account account = new Account(customer, 1000);
Bank bank = new Bank();
bank.deposit(account, 500); // 调用 Bank 类的方法
}
}
以上代码中,我们声明了一个Customer类和一个Account类,Account类包含了一个Customer对象和一个balance属性。我们还声明了一个Bank类,其中包含一个deposit()方法,它接受一个Account对象和一个double类型的参数。在deposit()方法中,我们简单地将参数加到余额(balance)上,并显示余额信息。
在TestBank类中,我们实例化了一个Customer对象和一个Account对象,并将它们传递给Bank类的deposit()方法,其中的参数可以是任何类型的Account对象。因此,在Bank类的deposit()方法中,参数的类型是Account,而不是任何特定的Account类。调用deposit()方法时,Java能够自动匹配参数类型,并调用相应的方法。
这就是Java中基于参数多态的一个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面向对象程序设计多态性示例 - Python技术站