java是什么 什么是多态?面向对象程序设计为什么要引入多态的特性?使用多态有什么优点?
什么是多态?面向对象程序设计为什么要引入多态的特性?使用多态有什么优点?
多态性是多个状态。
例如,有一个超类,它有两个子类,子类1和子类2。
超类有一个方法func(),它由两个子类重写。
然后我们可以定义一个超类引用obj来指向一个子类对象,比如超类obj=new subclass 1();然后我们调用目标函数当使用()方法时,它将被动态绑定,即obj其实际类型的func()方法,即子类1的func()方法。
同样,您可以编写超类obj=new subclass 2();目标函数()实际调用子类2的func()方法。
由于子类重写父类的方法,然后指向引用父类的子类对象,所以调用方法时会进行动态绑定,称为多态性。
多态性在程序扩展中起着非常重要的作用。例如,如果你想有一个子类3,你需要改变很多少。如果使用配置文件,则可以保持源代码不变。
为什么多态调用方法必须在运行时才能确定?
我考虑过这个问题。我想简要地谈谈我的看法。如果有错误,请改正。
这个问题与多态性的实现机制有关。对于Java,多态性调用和普通方法调用没有区别,也没有额外的开销,所以不管是在编译时还是在运行时确定。然而,对于C,C的多态性机制是基于虚拟表的。必须在运行时确定。这也是为什么C多态性正在减少的原因。它需要额外的成本,但这样做的目的是使投诉C兼容。
多态的好处?
1. 改进代码维护(继承保证)2、提高代码可伸缩性(多态保证)多态性:相同的操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针调用派生类中的方法。扩展数据多态性:将不同的子类对象作为父类处理,可以屏蔽不同子类对象之间的差异,编写通用代码,进行通用编程,以适应不断变化的需求。赋值后,父类型的引用可以根据当前分配给它的子对象的特性以不同的方式进行操作。也就是说,父亲的行为像儿子,儿子的行为不像父亲。
为什么多态下不能调用子类特有方法?
Animal a=new dog()//声明对父类的引用,指向子类对象。//子类继承自父类,并且子类在父类中具有非私有属性和方法。//无法调用子类引用的子类指针。//所以如果(dog的一个实例){dog dog=(dog)a狗。看()//使用子类引用调用子类方法。}
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。