多态是指对象在不同的情况下可以表现出不同的形态。在 Java 中,多态是通过继承和接口实现的。在多态的理念下,我们可以通过父类或接口类型来引用子类或实现类对象。
一个常见的例子是动物,有猫、狗、鸟等各种动物。我们可以定义一个 Animal 类作为这些动物的父类。然后根据不同的情况实现出不同的子类:
class Animal {
public void speak() {
System.out.println("I am an animal.");
}
}
class Cat extends Animal {
@Override
public void speak() {
System.out.println("Miao Miao");
}
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("Wang Wang");
}
}
以上是一个简化的示例,可以看到 Animal 类有一个 speak() 方法,而 Cat 和 Dog 类都继承了 Animal,同时也重写了 speak() 方法。每个子类都可以表现出自己的形态。接下来我们来看多态的表现:
Animal animal1 = new Cat();
animal1.speak();
Animal animal2 = new Dog();
animal2.speak();
在以上这段代码中,我们分别使用 Animal 父类类型来声明了 animal1 和 animal2 两个对象。但实际上 animal1 和 animal2 分别使用了子类 Cat 和 Dog 的实例化对象。因为 Cat 和 Dog 都是 Animal 的子类,所以它们也可以使用 Animal 类型。无论是 animal1.speak() 还是 animal2.speak(),输出的都是子类 Cat 和 Dog 的对应speack方法,而不是 Animal 类的 speak() 方法。
另外一个例子是我们可以定义一个接口 Shape,表示形状,然后实现出不同的子类,比如 Circle 和 Rectangle。
interface Shape {
public void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Draw a circle");
}
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Draw a rectangle");
}
}
以上示例中,我们定义了一个 Shape 接口,然后 Circle 和 Rectangle 两个类都实现了该接口。它们也可以使用多态的方式,将一个父类类型的变量指向一个子类的实例对象,从而实现不同的形态表现。
Shape shape1 = new Circle();
shape1.draw();
Shape shape2 = new Rectangle();
shape2.draw();
在以上代码中,我们使用 Shape 类型的变量分别指向了 Circle 和 Rectangle 类型的实例对象,从而实现了多态的表现形式。调用 draw() 方法时,会分别输出 "Draw a circle" 和 "Draw a rectangle"。
以上两个示例说明了 Java 的多态性质,以及如何使用多态来让代码更加灵活、可拓展。在实际开发中,多态一般都与继承、接口、抽象类一起使用,组成各种设计模式,可以极大地提高代码的复用性和可拓展性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的多态是什么? - Python技术站