TOP

A.3.2 多态性
2013-10-07 14:31:34 】 浏览:10122
Tags:A.3.2 多态性

A.3.2  多态性

在OOP中,多态性指的就是使某些对象具备多重含义的能力。例如,可以有多个类来实现一个dance()方法。多态机制可以保证能在所有这些类上安全地调用dance()方法,而无需知道实现不同版本的dance()方法的每个类或特定实现的准确类型。

1. 方法多态性

前面的示例提到了包含一个dance()方法的所有类。方法多态性最需关注的地方是每个类的dance()方法的实现细节稍有不同。

在ActionScript中,可以使用两种不同的方式实现方法多态性。第一种是创建一个声明了dance()方法的接口(下一节讨论接口)。第二种方法是在一个Dancer基类中实现dance()方法,然后使用override关键字在所有子类中实现一个特定类型的dance()方法。例如,可以具有类似于HipHopDancer.dance()、BalletDancer.dance()以及SquareDancer.dance()的方法。

类似于ActionScript,Java允许使用接口方法与重写方法实现方法多态性。不过,与ActionScript不同的是通过一种称为方法重载的技术,Java允许直接实现多态性。使用这种技术,可以在一个类中多次声明同一个方法,并且在每个实例中可以更改该方法接收的输入参数类型。例如,可以有dance(int partners)或dance(String type)方法。

与Java类似,C++(www.cppentry.com)也允许方法重载,但与ActionScript和Java不同的是C++(www.cppentry.com)没有接口和override关键字。C++(www.cppentry.com)使用虚拟类取代接口,并且当需要实现方法多态性时可以使用virtual关键字。

2. 抽象类与接口

在ActionScript中,接口可以实现方法多态性。此外,ActionScript中的接口还允许实现类型多态性。例如,如果有一个wash()方法,并希望传递多个animal类,而不需要知道实际上具体哪个animal类会被传递,那么使用implements关键字可以创建所有类都可以实现的一个IWashableAnimal接口。

Java也使用接口。不过,而ActionScript仅允许在接口中声明方法,Java还支持final变量。与ActionScript不同,Java并没有只停留在接口上。Java还支持抽象类。

Java中的抽象类是使用abstract关键字限定的类,与使用接口不同,也可以填充某些方法与属性,而通过在其声明前追加abstract关键字将剩余方法和属性定义为抽象的。当使用abstract关键字限定某个Java类时,该类将会是不可实例化的,并迫使开发人员创建并实例化该抽象类的子类。对于该抽象类的抽象方法也都遵循该规则。

C++(www.cppentry.com)也使用抽象类,尽管在C++(www.cppentry.com)中,实际上抽象类被称为纯虚(pure virtual)类。当在C++(www.cppentry.com)中需要类型多态性时,可以使用它们,因为该语言没有接口。



A.3.2 多态性 https://www.cppentry.com/bencandy.php?fid=49&id=6105

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇A.3.4 访问修饰符 下一篇A.2.2 类型强制转换