一,多态的含义
在面向对象的思想中,抽象,封装,继承,多态这几个词已经是我们经常见到的了。首先,多态是在继承的基础上形成的,多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。多态成立的另一个条件是在创建子类时候必须使用父类new子类的方式。如果一个语言只是支持类而不是支持多态的,那么该语言就不能说是面向对象而仅仅是基于对象。
二,多态的具体实现
如果对多态的概念理解不清楚,可以举一几个例子帮助理解
第一个例子:该例子出自百度百科,链接地址
public interface Parent//父类接口 { public void simpleCall(); } public class Child_A implements Parent { public void simpleCall(); { //具体的实现细节; } } public class Child_B implements Parent { public void simpleCall(); { //具体的实现细节; } }
Parent pa = new Child_A(); pa.simpleCall();
显然是调用Child_A的方法;而
Parent pa = new Child_B();
pa.simpleCall();
则是在调用Child_B的方法。
所以,我们对于抽象的父类或者接口给出了我们的具体实现后,pa 可以完全不用管实现的细节,只访问我们定义的方法,就可以了。事实上,这就是多态所起的作用。
第二个例子感觉也很容易理解,该例子出自百度知道,链接地址
鸡是所有其它鸡的基类, 定义了一个方法shape(), 此方法能指明鸡的形态. 所有的子类[火鸡,山鸡,田鸡等],都有这个shape方法, 表明自己的形态,如果用下面的方法定义我需要具体的鸡,
[基类 引用 = 实现类的对象]
for example:
鸡 a = new 火鸡();
鸡 a = new 田鸡();
鸡 a = new 山鸡();
鸡 a = new 母鸡();
当我使用的时候, 我采用 a 这个引用,
a.shape(), 就会得到鸡的形态.
如果我定义的是
鸡 a = new 火鸡();
那么a.shape得到的是火鸡的形态, 而不需要用具体的
火鸡 a = new 火鸡(); 再通过a.shape得到火鸡的形态
