java如何实现多态性
多态性的实现方式
在Java中,多态性主要通过继承和方法重写(Override)实现,结合父类引用指向子类对象的方式体现。以下是具体实现方法:

继承与方法重写
定义一个父类,子类继承父类并重写其方法。通过父类引用调用方法时,实际执行的是子类重写后的方法。

class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // 父类引用指向子类对象
myAnimal.makeSound(); // 输出 "Bark"
}
}
接口与实现类
通过接口定义方法签名,由实现类提供具体实现。接口引用可以指向不同实现类的对象,调用同一方法时表现出不同行为。
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing a square");
}
}
public class Main {
public static void main(String[] args) {
Shape shape1 = new Circle();
Shape shape2 = new Square();
shape1.draw(); // 输出 "Drawing a circle"
shape2.draw(); // 输出 "Drawing a square"
}
}
方法重载(编译时多态)
同一类中方法名相同但参数列表不同,编译器根据参数类型决定调用哪个方法。
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(5, 3)); // 调用int版本
System.out.println(calc.add(2.5, 3.7)); // 调用double版本
}
}
运行时多态的关键点
- 向上转型:父类引用指向子类对象(如
Animal animal = new Dog())。 - 动态绑定:JVM在运行时根据对象实际类型确定调用哪个方法。
instanceof检查:可在运行时判断对象的具体类型。
if (myAnimal instanceof Dog) {
Dog dog = (Dog) myAnimal; // 向下转型
dog.fetch();
}
多态性通过抽象和封装提高了代码的扩展性和可维护性,是面向对象编程的核心特性之一。






