科技信息 1.引言
多态性(polymorphism)一词来源于拉丁语 poly(表示多的意思)和 mor-phos(意为形态),其字面的含义是多种形态。在面向对象系统中,多态性是其核心内容之一,反映了人们在求解问题时,对相似性问题的一种求解方法。Java 语言实现了两种多态性:静态多态性和动态多态性。本文重点论述其采用重写机制实现动态多态性的原理,并结合实例讲解动态多态性的应用。
2.关于多态的概念
2.1 继承 继承描述了两个类之间的一种关系。当一个类拥有另外一个类的所有非私有数据和操作时,就称这两个类之间具有继承关系。被继承的类称为父类或超类,由继承而得到的类称为子类。Java 语言不支持多重继承,一个类只能有一个直接父类,父类可以同时拥有多个子类。Java 中用关键字 extends 实现继承。
2.2 重写 在类的继承的过程中,子类可以根据需要对从父类继承来的方法进行重新定义,这时父类和子类中的两个方法功能不同,但是要求两者名字、参数列表和返回类型要一致,就称子类重写了父类的该方法。对于子类重写的父类的方法,若父类的对象调用这个方法时,则调用父类中的定义;若子类的对象使用这个方法时,则调用子类中的定义,父类中的定义如同被 “屏蔽”了。
2.3 抽象类 在 Java 中,提供了抽象类来表示现实世界中的抽象概念,即用抽象类来定义一般状态和行为。在抽象类中通常包括有抽象方法,所谓抽象方法是指抽象类中有定义但没有给出其实现的方法。因此,抽象类不能创建实例对象,只能通过抽象类派生出新的子类,再由子类来创建对象,子类必须提供抽象方法的实现细节。抽象类和抽象方法用 abstract 标识。
代码示例一: abstract class Shape // 定义抽象类 // 定义抽象方法 { abstract public double getArea(); } // 定义子类 Circle 继承抽象类 Shape class Circle extends Shape { private double pi=3.14; public double radius=5; // 实现父类的抽象方法 getArea() public double getArea() { return piradiusradius;} } public class TestAbstract { public static void main(String[]args) // 创建子类的实例对象 { Circle c=newCircle(); } }
2.4 接口 接口是 Java 语言提供的另一种重要功能,接口可以具有数据成员 和方法,但与类相比有其特殊性:
(1)接口用 interface 声明,数据成员必须初始化,方法必须全部都声明为抽象的。
(2)接口之间的继承为多重继承,即一个接口可以有多个父接口。
(3)接口不能创建实例对象,必须利用接口的特性来建造一个新的类,称之为接口的实现,用 implements 表示,实现接口的类可以创建对象。一个类可以同时实现多个接口。
代码示例二:
// 定义接口 Shape2D public interface Shape2D { double pi=3.14; public abstract double getArea(); } // 定义接口 Color public interface Color { public abstract void setColor(Stringstr); } // 定义接口 Shape3D继承 Sh