什么是多态?
多态:方法或对象具有多种形态,是OOP的第三大特征,是建立在封装和继承基础之上,它指的是同一个方法在不同的对象上可以有不同的行为。多态性可以实现代码的灵活性和可扩展性,是面向对象编程中的一个强大的特性。
多态性的实现是依靠继承和方法重写(覆盖)。当一个子类继承自父类,并重写(覆盖)了父类的方法时,通过使用父类的引用指向子类的对象,可以在运行时根据对象的实际类型,来调用相应的方法。
简而言之,多态的概念可以归结为两点:
-
子类可以替换父类:子类对象可以直接赋值给父类引用,这是因为子类对象拥有与父类对象相同的属性和方法。
-
同一操作可以有不同的行为:通过父类引用指向子类对象,调用的方法取决于子类重写的方法。
多态具体体现
1.方法多态
(1)重载体现多态
(2)重写体现多态
2.对象多态
(1)对象的编译类型和运行类型可以不一致,编译类型在定义时,就确定,不能变化
(2)对象的运行类型是可以变化的,可以通过getClasss()来查看运行类型
(3)编译类型看=号的左边,运行类型看=号右边
3.具体体现
public class hhh {
public static void main(String[] args) {
AAA obj=new BBB();
AAA b1=obj;
System.out.println("obj的运行类型="+obj.getClass());///BBB
obj=new CCC();//向上转型
System.out.println("obj的运行类型="+obj.getClass());//CCC
obj=b1;
System.out.println("obj的运行类型="+obj.getClass());//BBB
}
}
class AAA{
}
class BBB extends AAA{
}
class CCC extends BBB{
}
java的动态绑定机制是什么?
运行时绑定也叫动态绑定,它是一种调用对象方法的机制。Java调用对象方法时,一般采用运行时绑定机制。
1.当调用对象方法时,该方法会和该对象的内存地址、运行类型绑定
2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
总结
多态性的优点包括:
-
灵活性:通过多态性,我们可以编写灵活的代码,可以在运行时通过指向不同对象的相同父类引用,实现不同的行为。
-
可扩展性:通过继承和多态性,我们可以轻松地添加新的子类,并通过父类引用来访问这些子类对象的共同行为。
-
可维护性:多态性使得代码结构更清晰,更易于理解和维护。通过将共同行为定义在父类中,可以避免代码的重复和冗余。
总之,多态性是面向对象编程中的一种重要特性,它实现了代码的灵活性和可扩展性。通过将相同接口或抽象类作为父类引用,可以支持不同的子类对象具有不同的行为。这种能力使得我们能够更加高效地编写代码,并且使得代码更易于理解和维护。