标签:维护 文章 sleep height java多态 设置 strong 类类型 描述
多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
比如有一个父类superClass,它有2个子类subClass1,subClass2。superClass有一个方法 func(),两个子类都重写了这个方法。那么我们可以定义一个superClass的引用obj,让它指向一个子类的对象,比如superClass obj = new subClass1();那么我们调用obj.func()方法时候,会进行动态绑定,也就是obj它的实际类型的func()方法,即subClass1的func()方法。同样你写superClass obj = new subClass2();obj.func()其实调用的是subClass2的func()方法。这种由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态。多态对程序的扩展具有非常大的作用,比如你要再有一个subClass3,你需要改动的东西会少很多。
用一句话概括:事物在运行过程中存在不同的状态。先以教科书举例说明,下文再举一个花木兰替父从军的例子加以解释和说明,多态的存在有三个前提:
1、需要有继承关系
2、子类重写父类的方法
3、父类引用指向子对,
但是,其中又有很多细节需要注意。首先我们定义两个类,一个父类Animal,一个子类Cat
父类Animal:
子类Cat
测试类Demo:
解释:以上的三段代码充分体现了多态的三个前提,即:
1、存在继承关系:Cat类继承了Animal类。
2、子类要重写父类的方法:子类重写(override)了父类的两个成员方法eat(),sleep()。其中eat()是非静态的,sleep()是静态的(static)。
3、父类数据类型的引用指向了子类对象:Animal am=new Cat(),语句在堆内存中开辟了子类Cat的对象,并把栈内存中的父类(Animal)的引用指向了这个Cat对象。
到此,满足了Java多态的必要三个前提。
参考文章
https://www.cnblogs.com/xuanlin666/p/10857255.html
标签:维护 文章 sleep height java多态 设置 strong 类类型 描述
原文地址:https://www.cnblogs.com/yimugoi/p/12496530.html