多态
- 所谓多态,就是指一个引用(类型)在不同的情况下的多种状态。也可以理解为,多态是指通过指向父类的指针,来调用在不同子类中实现的方法(用
父类引用调用子类方法对象
的方法)
IDEA可以通过alt+insert
可以快速重写
同时需要注意静态方法无法重写
。
在Java中,多态(Polymorphism)是面向对象编程的一个重要概念,它允许使用一个父类类型的引用变量来引用子类类型的对象
。多态性提供了代码的灵活性和可扩展性,使得可以在运行时根据实际对象的类型来调用适当的方法。
以下是Java多态的一些关键点和用法:
-
继承关系:多态性是建立在类之间的继承关系之上。子类继承父类的特性,包括字段和方法。
-
父类引用变量:可以使用父类类型的引用变量来引用子类的对象。这样做可以实现对象的多态性,即一个引用变量可以指向不同类型的对象。
-
动态绑定:Java中的方法调用是动态绑定的,也称为后期绑定。这意味着方法的调用是根据实际对象的类型来确定的,而不是引用变量的类型。
-
重写方法:子类可以重写父类的方法,即在子类中定义与父类相同名称和参数的方法。通过多态性,可以根据实际对象的类型来调用适当的重写方法。
-
编译时类型和运行时类型:多态性的一个重要概念是编译时类型和运行时类型。编译时类型是指引用变量的声明类型,而运行时类型是指引用变量所指向的实际对象的类型。
-
instanceof操作符:可以使用
instanceof
操作符来检查对象的类型,以确定它是否是某个类或其子类的实例。
通过多态性,可以实现更灵活、可扩展和可维护的代码。通过使用父类引用变量来引用不同类型的子类对象,可以在不修改现有代码的情况下,轻松地添加新的子类,并根据实际对象的类型来调用适当的方法。
以下是一个简单的示例,展示了多态性的使用:
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
public void sound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
public void sound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat(); // 父类引用能够接受子类引用反之则不行
animal1.sound(); // 输出 "Dog barks"
animal2.sound(); // 输出 "Cat meows"
}
}
在上述示例中,Animal
类是父类,Dog
和Cat
类是其子类。通过将子类对象赋值给父类引用变量,实现了多态性。在运行时,根据实际对象的类型,调用了适当的重写方法。
同时需要注意静态方法无法重写。
需要注意的是,多态性只适用于方法调用,而不适用于类的静态成员和私有成员。此外,多态性不能应用于构造方法,因为构造方法是在创建对象时调用的,而在多态性应用之前。
对象时调用的,而在多态性应用之前。
[外链图片转存中…(img-11pG0tc4-1689148919621)]