继承和多态

来源:互联网 发布:软件操作手册 编辑:程序博客网 时间:2024/06/05 18:13

在面向对象编程里,除了封装,还有两个重要的概念需要去掌握,那就是继承和多态。

一、继承概述

继承就是说在应用程序的类之间存在一种继承关系,这种关系能使一个类继承或扩展另一个类的功能。

在C++中,是多继承,一个类能从多个类继承功能。但是在Java里,只有单继承,一个新类只能从单个类继承功能。单继承使得管理代码更容易些,因为如果你在类之间创建了继承关系,一旦发现bug,那么这个bug要么在你当前类中,要么就在你所继承的类中。

有很多种方式描述继承关系,其实只是换个字眼而已。有的开发者将这种关系当作是父子关系,父类拥有功能,子类继承;又有人将其描述为基类和派生类,基类拥有功能,派生类继承扩展功能。在Java中,我们使用超类和子类的说法,超类拥有功能,子类继承功能。

Java中每个子类只能拥有一个超类,实际上即使你并没有使用关键字显示继承一个类,所有的类都继承一个超类,即首字母大写的Object类,Object类位于Java继承树形结构的顶端。

二、多态
多态就是在超类和子类已经存在继承关系的情况下,你可以将一个从子类实例化过来的对象当作本地子类类型看待,而且也可以将该类型当作超类类型看待。

我们看一段代码3-1:

public class A{    public void talk()    {        System.out.println(“早上好!”);    }}public class B extends A{}public class Main{        public static void main(String[] args)        {            A a = new B();            a.talk();        }}

分析代码3-1:A a = new B();我们通过子类B的构造函数生成实例对象,但是我们使用的却是超类类型A,这时子类对象就被当作是超类对象,而且我们可以像使用超类对象一样,使用超类的方法了,比如:我们可以调用超类的方法talk()。当有了继承关系,我们设计代码的灵活性就大大提高了。

三、一个简单的继承关系
我们看看什么样的类可以存在继承关系。
1、设计定义一个橄榄油的类Olive;
2、由于世界上有许多类型的橄榄油,所以我们可以将类Olive设计为超类,这个超类拥有大多数橄榄油通用的属性和方法功能。
3、将许多其他特定类型的橄榄油设计为子类,让各个子类从超类中继承属性和功能。
4、绘制UML图或者简易的图表示继承关系。

            超类Olive  子类Kalamata         子类Ligurian       more---

Olive是超类,Kalamata和Ligurian都是Olive的子类。我们之所以叫单继承,就是因为每个子类只能有一个超类,但是一个超类却能有多个子类。

待续—-

0 0