面向对象——类的继承和多态waterstar

继承是指:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

(1)通过继承创建的新类称为“子类”或“派生类”。

(2)被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

2、继承的分类

继承概念的实现方式主要有2类:实现继承、接口继承。

(1) 实现继承是指使用基类的属性和方法而无需额外编码的能力;

(2)接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构父类方法);

在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。

抽象类仅定义将由子类创建的一般属性和方法。

OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

3、示例代码

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

#类的继承

classPeople:

def__init__(self,name,age):

defeat(self):

defsleep(self):

deftalk(self):

classMan(People):#继承父类People类

defmake_money(self):

defsleep(self):

print("man is sleeping...")

classWomen(People):

defshop(self):

m1 = Man("Jack","20")

w1 = Women("Amy","25")

#运行结果:

Jackiseating...

Jackismaking money...

Jackissleeping...

manissleeping...

Amyistalking...

Amyisshopping...

4、子类中对父类的构造函数进行重构两种方法

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

#类的继承

#class People:      #经典类

classPeople(object):#新式类

def__init__(self,name,age):

defeat(self):

defsleep(self):

deftalk(self):

classMan(People):#继承父类People类

def__init__(self,name,age,money):

#People.__init__(self,name,age)    #(方法一)对构造函数进行重构、添加父类中没有的属性

super(Man,self).__init__(name,age)#(方法二)利用super对构造函数进行重构(新式类写法)

defmake_money(self):

defsleep(self):

print("man is sleeping...")

classWomen(People):

defshop(self):

m1 = Man("Jack","20",10)

w1 = Women("Amy","25")

#运行结果:

Jack have money10$

Jackiseating...

Jackismaking money...

Jackissleeping...

manissleeping...

Amyistalking...

Amyisshopping...

5、多继承方式

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

#类的继承

#class People:      #经典类

classPeople(object):#新式类

def__init__(self,name,age):

defeat(self):

defsleep(self):

deftalk(self):

classRelationship(object):

defmake_friends(self,obj):

classMan(People,Relationship):#多继承

def__init__(self,name,age,money):

#People.__init__(self,name,age)    #(方法一)对构造函数进行重构、添加父类中没有的属性

super(Man,self).__init__(name,age)#(方法二)利用super对构造函数进行重构(新式类写法)

defmake_money(self):

defsleep(self):

print("man is sleeping...")

classWomen(People,Relationship):#多继承

defshop(self):

m1 = Man("Jack","20",10)

w1 = Women("Amy","25")

#运行结果:

Jack have money10$

Jackismaking friendswithAmy

[<__main__.Women object at0x0057FA30>]

6、新式类与经典类的继承顺序

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

classA(object): #新式类

def__init__(self):

print("A")

classB(A):

def__init__(self):

print("B")

classC(A):

def__init__(self):

print("C")

classD(B,C):

def__init__(self):

pass

#print("D")

obj = D()

7、继承示例——学校、教师与学生

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

#继承实例(新式类)——模拟学校、教师与学生

classSchool(object):

def__init__(self,name,addr):

defenroll(self,stu_obj):#学生注册

defheir(self,staff_obj):#聘请教师

classSchoolMember(object):

def__init__(self,name,age,sex):

deftell(self):

pass

classTeacher(SchoolMember):

def__init__(self,name,age,sex,salary,course):

super(Teacher,self).__init__(name,age,sex)

deftell(self):

print('''

----- info of Teacher:%s -----

Name:%s

Age:%s

Sex:%s

Salary:%s

Course:%s

defteach(self):

classStudent(SchoolMember):

def__init__(self,name,age,sex,stu_id,grade):

super(Student,self).__init__(name,age,sex)

deftell(self):

print('''

----- info of Student:%s -----

Name:%s

Age:%s

Sex:%s

Stu_id:%s

Grade:%s

defpay_tuition(self,amount):

#实例化

school = School("qinghua","beijing")

t1 = Teacher("Jack","30","M","20000","Python")

t2 = Teacher("Amy","28","F","15000","Linux")

s1 = Student("liu","23","M","1701","Python")

s2 = Student("wang","25","F","1702","Linux")

#调用显示学生与教师的信息

#聘请的第一位教师教课

#运行结果:

----- info of Teacher:Jack -----

Name:Jack

Age:30

Sex:M

Salary:20000

Course:Python

----- info of Student:liu -----

Name:liu

Age:23

Sex:M

Stu_id:1701

Grade:Python

聘请教师 Jack

liu 学员办理注册

wang 学员办理注册

[<__main__.Teacher object at0x0059FDB0>]

[<__main__.Student object at0x0059FDF0>, <__main__.Student object at0x0059FE10>]

Jackisteaching course [Python]

liu has paied tuitionfor$5000

wang has paied tuitionfor$5000

8、多态(polymorphisn)——一种接口,多种形态

(1)定义

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,

赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

多态的作用:我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。

而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

Pyhon 很多语法都是支持多态的,比如 len(),sorted(), 你给len传字符串就返回字符串的长度,传列表就返回列表长度。

(2)示例代码:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

classAnimal(object):

def__init__(self,name):

deftalk(self):

raiseNotImplementedError("Subclass must implement abstract method")

# 多态——一种接口,多种形态

@staticmethod

defanimal_talk(obj):

classCat(Animal):

deftalk(self):

classDog(Animal):

deftalk(self):

d = Dog("A")

c = Cat("B")

#多态

#运行结果:

A Woof! Woof!

B Meow!

9、面向对象设计利器——领域建模

(1)定义

从领域模型开始,我们就开始了面向对象的分析和设计过程,可以说,领域模型是完成从需求分析到面向 对象设计的一座桥梁。

领域模型,顾名思义,就是需求所涉及的领域的一个建模,更通俗的讲法是业务模型。

(2)领域模型有两个主要的作用:

发掘重要的业务领域概念

建立业务领域概念之间的关系

(3)领域建模三字经

领域模型如此重要,领域建模的方法概括一下就是“找名词”! 即使是简单的找名词这样的操作,也涉及到分析和提炼,而 不是简单的摘取出来就可,

这种情况下分析师和设计师的经验和技能就能够派上用场了。但领域模型分析 也确实相对简单,即使没有丰富的经验和高超的技巧,至少也能完成一个能用的领域模型。

一个关键的问题:从哪里找? 因为领域模型是“需求到面向对象的桥梁”,能想到:从需求模型中找,具体来说就是从用例中找。

归纳:领域建模的方法就是“从用例中找名词”。 当然,找到名词后,为了能够更加符合面向对象的要求和特点。

我们还需要对这些名词进一步完善,这就 是接下来的步骤:加属性,连关系!

THE END
0.构造方法详解本文详细介绍了构造方法的概念、语法特点及其作用,包括创建对象和初始化实例变量,并通过具体代码示例展示了构造方法的重载和使用。 1、构造方法又被称为构造函数/构造器/Constructor 2、构造方法的语法结构: [修饰符列表] 构造方法名(形式参数列表){ 构造方法体; jvzquC41dnuh0lxfp0tfv8|gkzooa=:9396848ftvkimg8igvcomu86377=97:9
1.Java构造方法详解1、构造方法又被称为构造函数/构造器/Constructor 2、构造方法语法结构: [修饰符列表] 构造方法名 (形式参数列表) { 构造方法体; } 3、回顾一下普通方法的语法结构: [修饰符列表] 返回值类型 方法名 (形式参数列表) { 方法体; } 4、对于构造方法来说,“返回值类型”不需要指定,并且也不能写void。只要写jvzquC41dnuh0lxfp0tfv8|gkzooa?7:5:7978ftvkimg8igvcomu86447?27@9
2.JS中常见的8种继承方法总结javascript技巧子类使用super关键字调用父类的构造函数,并可以访问父类的属性和方法。ES6类继承提供了更加语法简洁和面向对象的继承方式。 以上是JavaScript中常见的八种继承方式,每种方式都有其特点和适用场景。根据具体需求,你可以选择适合的继承方式来构建对象之间的关系。 总结 到此这篇关于JS中常见的8种继承方法的文章就介绍到jvzquC41yy}/lk:30pku1sfxcuiskyy1527:3@=gj0nuo
3.Java构造方法2、构造方法的重载 一、概述 构造方法也叫作构造器、构造函数。但是我们平时习惯上还是会叫做构造方法。 作用:在创建对象的时候给成员变量进行初始化。 这里的初始化是一个专业名字,其实就是赋值的意思。 因此构造方法简单理解:就是在创建对象的时候给成员变量进行赋值的。 jvzquC41dnuh0lxfp0tfv8vsa5?:4:6571gsvrhng1jfvjnnu174;A>53;=
4.构造函数方法构造函数方法 1. 默认构造函数 没有参数的构造函数。 classExample{ public: Example() {} }; AI写代码 2. 带参数的构造函数 classExample{ public: intvalue; Example(intv) :value(v) {} }; AI写代码 3. 拷贝构造函数 用于通过另一个同类型的对象来创建新对象。jvzquC41dnuh0lxfp0tfv8tpgvkmcoz1ctzjeuj1fgzbkux136612;=34
5.学好数学的方法与技巧六种解题思想 1.函数与方程思想 函数与方程的思想是中学数学最基本的思想。所谓函数的思想是指用运动变化的观点去分析和研究数学中的数量关系,建立函数关系或构造函数,再运用函数的图像与性质去分析、解决相关的问题。而所谓方程的思想是分析数学中的等量关系,去构建方程或方程组,通过求解或利用方程的性质去分析解决问jvzquC41yy}/z~jzkng/exr1yc0|qnfcq5d4@<260nuou
6.软件技术专业人才培养方案(三年制)④具备良好的语言文字应用能力,了解中华优秀文化,掌握常用应用文的写作方法。 ⑤掌握一定的英语基础知识,在听、说、读、写、译中能正确运用所学语法知识。 ⑥掌握体育与健康必备的理论与实践的知识与技能;领会体育精神与体育文化;具备运动安全和健康养护知识。 jvzquC41yy}/hyk0et0cugd1463585;345d4B92c3:87:<1rcmf0qyo
7.JavaScript8种继承方式(全)kiss雪夜JavaScript - 8种继承方式 (全) 什么是继承 =>就是让一个对象使用了不属于自己的属性和方法 继承的作用 =>将相关的构造函数之间的公共方法提取出来,放在一个公共的构造函数上,节省空间 八种继承的方法: (本文栗子全部使用 Student 构造函数继承 Person 类)jvzquC41yy}/ewgnqiy/exr1{wsn{uzem{5q1:578781:7mvon