多态(未完)

原创 2013年12月04日 21:47:13

一.什么是多态

比如有一个父类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,你需要改动的东西会少很多,要是使用了配置文件那就可以不动源代码了。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

C++中,实现多态有以下方法:虚函数,抽象类,重载,覆盖,模板。

多态就是允许方法重名 参数或返回值可以是父类型传入或返回。

二.多态的例子

在C++中:

class A
{
public:
A() {}
virtual void foo()
{
cout << "This is A." << endl;
}
};
class B : public A
{
public:
B() {}
void foo()
{
cout << "This is B." << endl;
}
};
int main(int argc, char* argv[])
{
A *a = new B();
a->foo();
if(a != NULL)
delete a;
return 0;
}
这将显示:
This is B.
如果把virtual去掉,将显示:
This is A.
前面的多态通过使用虚函数virtual void foo()来实现。
在java中:
多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现(以java语言为例):
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 可以完全不用管实现的细节,只访问我们定义的方法,就可以了。



多态的四种不同形式

在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生完全不同的结果,这一现象称为多态。在使用多态的时候,用户可以发送一个通用的消息,而实现的细节由接收对象自行决定。这样,同一消息就可以调用不同...
  • u010104750
  • u010104750
  • 2015年11月03日 08:26
  • 1317

动态多态以及多态调用过程

多态分为静态多态与动态多态。静态多态包括函数重载,泛型编程。动态是虚函数的使用。         静态多态是指编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用...
  • gmy2016wiw
  • gmy2016wiw
  • 2017年02月26日 15:07
  • 389

[java面试]关于多态性的理解

运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法...
  • kuaisuzhuceh
  • kuaisuzhuceh
  • 2015年07月02日 14:28
  • 1647

多态经典面试题解析

多态经典面试题 已知类ABCD,B继承于A,C和D继承于B,具体如下 public class A { public void print(A a){ System.out.println(...
  • yxb_yingu
  • yxb_yingu
  • 2016年04月13日 19:25
  • 2372

Java三大特性之多态:从JVM的角度来看多态

案例分析: Fish jiyu_1 = new Jiyu(); 我们把Fish称为变量的静态类型,把Jiyu称为变量的实际类型。 静态类型和实际类型,在程序中都可能变化,区别是静态类型的最终版本在编译...
  • reggergdsg
  • reggergdsg
  • 2016年07月23日 17:00
  • 1059

JavaWeb接口的多态现实

JavaWeb接口的多态现实
  • zx520sun
  • zx520sun
  • 2016年11月04日 10:50
  • 359

如何用c语言实现多态

前几天在小组无意见听到学姐说到c语言实现多态这个词,比较感兴趣,欢迎一起讨论哈。 提前说一下,c实现多态算是一个奇怪的用法吧,而且不是完全的多态,并不通用,也不推荐用。感兴趣的可以了解下 我们都知...
  • wwh578867817
  • wwh578867817
  • 2015年04月17日 19:24
  • 2280

java中实现多态的机制是什么?

面向对象编程有三大特性:封装、继承、多态。 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。 ...
  • BornLiLi
  • BornLiLi
  • 2017年02月15日 18:31
  • 8259

Java多态性理解,好处及精典实例

核心: 1、多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到...
  • Jian_Yun_Rui
  • Jian_Yun_Rui
  • 2016年10月26日 20:12
  • 9430

使用多态替代If else或switch的更多尝试

  • sanniao
  • sanniao
  • 2016年11月03日 21:14
  • 2285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多态(未完)
举报原因:
原因补充:

(最多只允许输入30个字)