面试题答案
一键面试多态性在Java中实现代码可扩展性的原理
多态性是Java面向对象编程的重要特性之一,它允许通过使用父类类型的变量来引用子类对象,并根据实际引用对象的类型调用相应的方法。这种机制使得代码在不修改现有代码主体的情况下,能够轻松添加新的子类,从而实现代码的可扩展性。
- 继承:子类继承父类,获取父类的属性和方法,这是多态的基础。
- 重写:子类重写父类中定义的方法,以提供适合自身的实现。
- 向上转型:将子类对象赋值给父类类型的变量,这使得代码能够以统一的方式处理不同子类的对象。
示例代码
// 父类
class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
// 子类1
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
// 子类2
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
// 创建父类类型变量并引用不同子类对象
Animal animal1 = new Dog();
Animal animal2 = new Cat();
// 调用方法,实际执行的是子类重写后的方法
animal1.makeSound();
animal2.makeSound();
// 体现代码扩展性:添加新子类
// 假设新增一个鸟类
class Bird extends Animal {
@Override
public void makeSound() {
System.out.println("叽叽叽");
}
}
Animal animal3 = new Bird();
animal3.makeSound();
}
}
代码解释
- 父类
Animal
:定义了一个makeSound
方法,所有动物都有发出声音的行为,但具体声音由子类确定。 - 子类
Dog
和Cat
:继承自Animal
类,并各自重写了makeSound
方法,以实现自己独特的声音。 - 主函数
main
:- 创建了
Animal
类型的变量animal1
和animal2
,分别引用Dog
和Cat
的对象。这就是向上转型。 - 调用
animal1.makeSound()
和animal2.makeSound()
时,实际执行的是Dog
和Cat
子类中重写的方法,体现了多态。 - 新增
Bird
子类后,只需创建Bird
对象并赋值给Animal
类型变量animal3
,就能调用其重写的makeSound
方法,无需修改原有代码,体现了代码的可扩展性。
- 创建了