Java教程

学习笔记11

本文主要是介绍学习笔记11,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

类与类之间的关系

--------------------------------------------

一.继承

1.单继承

继承是指一个类A能利用另一个类B的资源(包括属性和方法等),其中B类被称为基类(或父类),A类被称为派生类(或子类)。

Python支持单继承和多继承。继承的意思就是子承父业,父类的公开属性和方法,子类都自动继承。继承的语法如下:

class 子类名(父类名):
        语句1
        语句2
        ……
        语句n
        ……

将父类名放在()中,只有一个父类的时候称为单继承。

例:

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.多继承

一个子类可以同时有两个或以上的父类,这种称为多继承。多继承的语法如下:

class 子类名(父类名1, 父类名2….):
        语句1
        语句2
        ……
        语句n

例:

在Python中,当几个父类都具备某个方法(或属性)时,会按子类继承父类时的顺序依次查找同名的方法,先找到谁就执行谁的方法。

二、类的关联和依赖

1.依赖

 依赖具有某种偶然性,表现在代码上,为依赖的类的某个方法以被依赖的类作为其参数。如果A依赖于B,那就意味着B的变化可能要求A也发生变化,在UML图中,一般用一个带虚线的箭头表示,以人借船过河为例,UML图如图所示。

根据这个图,在Python中的代码实现如下:

在上面的代码中有两个类:Person类和Boat类。Person类的方法gobyboat需要boat作为参数传入,这样才能调用boat的过河(overriver)方法,这就叫依赖,Person依赖于Boat。

2.关联

所谓关联,就是表示相识关系,比如类A知道类B的存在,类A可以调用类B的属性和方法。在UML图中,一般用没有箭头的实线表示。关联关系有单向关联、双向关联、自我关联等各种关系。

Python代码实现上,一般关联关系都是一个类作为另一个类的成员属性,例如:

上面是关联关系的代码举例,company类有属性employee,所有company可以通过employee访问employee的属性和方法,关联关系要比依赖关系更加紧密,因此又把依赖关系称之为弱关联。

三、类的聚合与复合

聚合和复合(组合)也是类的关系之一。聚合与组合其实都是关联的特例,都是整体和部分的关系。它们的区别在于聚合的两个对象之间是可分离的,它们具有各自的生命周期;组合往往表现为一种唇齿相依的关系。实际上,这两种关系语法上是一样的,区别在于语义。在语法上,都是将另一个类作为自己的属性,这样就叫聚合或复合,例如下面的代码:

    >>> class A:
    ...     pass
    ...
    >>> class B:
    ...     pass
    ...
    >>> class C:
    ...     a=A()
    ...     b=B()
    >>>class D:
…     b=B()

上面的代码中,因为类C有两个属性a和b,所以C和A、B的关系就是聚合,C是将A、B类聚合到自己身上,同时B类还作为D类的一部分,而A只能作为类C的一部分,那么类C和A就是生死与共的关系,没有C就不存在A(因为A只给C当属性使用),因此A和C是复合(组合)关系,B和A是聚合关系。
在UML中,聚合关系用一个空心菱形带实线表示,复合关系用一个实心菱形带实线表示,如图所示为类A、B、C、D之间的聚合和复合关系图。

 

ps:重写

Python允许子类重写父类中已有的方法,而且不需要特殊的关键字进行说明。比如前面的“猫”类,如果“白猫”类要有自己的miaomiao()方法,就需要做如下改动:

 

那么子类对象调用的就是它自己的miaomiao()。

 

 

 

这篇关于学习笔记11的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!