java中的多态

发布时间:2024年01月23日

①定义:

Java的多态是指同一个方法在不同对象上有不同的行为。它是面向对象编程的一个重要特性,通过多态可以实现代码的灵活性和可扩展性。

在Java中,多态的实现主要依靠两个机制:继承和方法重写。

  1. 继承:子类可以继承父类的属性和方法。当子类继承父类后,可以使用父类的引用来引用子类的对象。这样,通过父类的引用调用同名方法时,实际上会调用子类中重写的方法。

  2. 方法重写:子类可以重写父类的方法,即在子类中重新定义与父类中同名、同参数列表、同返回类型的方法。当父类的引用指向子类的对象时,调用该方法时会执行子类中的方法。

多态的优点:

  • 提高代码的灵活性和可扩展性:通过多态,可以在不修改原有代码的情况下,通过增加新的子类来扩展程序的功能。

  • 简化代码的编写和维护:通过多态,可以使用父类的引用来统一处理不同子类的对象,减少了代码的重复性。

  • 提高代码的可读性:通过多态,可以使代码更加简洁、清晰,易于理解和维护。

②方法的多态

方法的重载和重写就体现了多态

③对象的多态

(1)一个对象的编译类型和运行类型可以不一致

Animal animal = new Dog();

编译类型为Animal,运行类型为Dog;

(2)编译类型在定义对象时,就确定了,不能改变;

(3)运行类型可以变化;

Animal animal = new Dog();//编译类型为animal,运行类型为dog;
animal = new Cat();//编译类型为animal,运行类型为cat;

(4)编译类型看等号的左边;运行类型看等号的右边;

④向上转型

(1)本质:父类的引用指向了子类的对象;

(2)语法:父类类型? ? ? ? 引用名=new? ? ? ? 子类类型();

Animal animal = new Dog();

(3)特点:编译类型看左边,运行类型看右边;

可以调用父类中的所有成员(需遵守访问权限),

不能调用子类中特有成员,(因为在编译阶段,能调用哪些成员,是由编译类型决定的)

//animal.catchMause();错误,因为这是子类特有的方法

最终运行效果看子类(运行类型)的具体实现;即调用方法时,按照从子类(运行类型)开始查找重写或重载的方法,如果没有的话,就去父类中找,直到Object类;

⑤向下转型

(1)语法:子类类型? ? ? ? 引用名=(子类类型)父类引用;

Animal animal = new Dog();
Dog dog = (Dog) animal;

(2)只能强转父类的引用,不能强转父类的对象;

(3)要求父类的引用必须指向的是当前目标类型的对象;

(4)当向下转型后,可以调用子类类型中的所有成员;

⑥注意事项

(1)属性没有重写之说,属性的值只看编译类型(等号的左边);

(2)instanceOf比较操作符,用于判断对象的运行类型,是否为XX类型或XX类型的子类型

文章来源:https://blog.csdn.net/2301_76604664/article/details/135759140
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。