Java基础编程

07 Java的继承与多态

2017-01-25  本文已影响26人  acc8226

继承

Java继承的实现(只支持单继承,而不是多继承,称为接口的多实现)
    
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类. 定义类时直接通过extends关键字指明要继承的父类.
子类对象除了可以访问子类中直接定义的成员外,可直接访问父类的所有非私有成员.

继承的作用

How 如何使用一个继承体系中的功能:

成员变量隐藏

子类成员变量与父类一样,会屏蔽父类中的成员变量,称为“成员变量隐藏”。

方法的覆盖(Override)

如果子类方法完全与父类方法相同,即:相同的方法名、相同的参数列表和相同的返回值,只是方法体不同,这称为子类覆盖(Override)父类方法。

在声明方法时最后添加@Override注解,@Override注解不是方法覆盖必须的,它只是锦上添花,但添加@Override注解有两个好处:

方法覆盖时应遵循的原则:

  1. 覆盖后的方法不能比原方法有更严格的访问控制(可以相同)。例如将代码第②行访问控制public修改private,那么会发生编译错误,因为父类原方法是protected。
  2. 覆盖后的方法不能比原方法产生更多的异常。
  3. 父类中的私有方法不可以被覆盖。

覆盖的应用:

【注意】使用this查找匹配的方法时首先在本类查找,找不到时再到其父类和祖先类查找;使用 super 查找匹配方法时,首先到直接父类查找,如果不存在,则继续到其祖先类逐级往高层查找。

多态性

体现在父类或者接口的引用指向或者接收自己的子类对象
作用:多态的存在提高了程序的扩展性和后期可维护性.

发生多态要有三个前提条件:

  1. 继承。多态发生一定要子类和父类之间。
  2. 覆盖。子类覆盖了父类的方法。
  3. 声明的变量类型是父类类型,但实例则指向子类实例。

引用类型转换

并不是所有的引用类型都能互相转换,只有属于同一棵继承层次树中的引用类型才可以转换。

类型转换有两个方向:

将父类引用赋值给子类变量时要进行强制转换,强制转换在编译时总是认可的,但运行时的情况取决于对象的值.如果父类对象引用指向的就是该子类的一个对象,则转换是成功的.否则会抛出ClassCastException. 如果不能确定实例是哪一种类型,可以在转型之前使用instanceof运算符判断一下。

UML图简介

UML是Unified Modeling Language的缩写,即统一标准建模语言。它集成了各种优秀的建模方法学发展而来的。UML图常用的有例图、协作图、活动图、序列图、部署图、构件图、类图、状态图。

面向对象分析与设计(OOAD)时,会用到UML图,其中类图非常重要,用来描述系统静态结构。Student继承Person的类图如图12-1所示。类图中的各个元素说明如图12-2所示,类用矩形表示,一般分为上、中、下三个部分,上部分是类名,中部分是成员变量,下部分是成员方法。实线+空心箭头表示继承关系,箭头指向父类,箭头末端是子类。UML类图中还有很多关系,如图12-3所示,如图虚线+空心箭头表示实线关系,箭头指向接口,箭头末端是实线类。


类图中的元素
上一篇 下一篇

猜你喜欢

热点阅读