zoukankan      html  css  js  c++  java
  • 类的继承

    面向对象编程(oop)语言的一个主要功能就是"继承"。继承是指这样一种能力:它可以使用现在有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
    通过继承创建的新类称为"子类"或"派生类"。
    被继承的类成为"基类"、"父类"或"超类"。
    继承的过程,就是从一般到特殊的过程。
    要实现继承,可以通过"继承(Inheritance)和"组合"(Composition)来实现。
    在某些OOP语言中,一个子类可以继承多个基类。三十一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

    继承概念的实现方式主要有2类:实现继承、接口继承。
    ©实现继承是指使用基类的属性和方法而无需额外编码的能力;
    ©接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构父类方法);

    抽象类仅定义将由子类创建的一般属性和方法。
    OO开发范式大致为:划分对象-抽象类-将类组织成为层次化结构(继承和合成)-用类与实例进行设计和实现几个阶段。

    简单的例子:
     1 class dog(object):
     2     def __init__(self, name, age, color):
     3         self.name = name
     4         self.age = age
     5         self.color = color
     6 
     7     def normal(self):
     8         print("这是一只%s的狗,今年%s岁了,叫%s" % (self.color, self.age, self.name))
     9 
    10 
    11 class bigdog(dog):
    12     def __init__(self, name, age, color, big):
    13         dog.__init__(self, name, age, color)
    14         self.big = big
    15 
    16     def sep(self):
    17         print("这个品种的狗狗体型特别大!!!%s" % self.big)
    18 
    19 
    20 a = dog("猪猪", "2", "白色")
    21 b = bigdog("猪猪", "2", "白色", "非常巨大的贵宾犬")
    22 a.normal()
    23 b.sep()

    最典型的例子:

     1 class F1(object):
     2     def __init__(self):
     3         print("----")
     4 
     5     def a1(self):
     6         print("F1_A1")
     7 
     8     def a2(self):
     9         print("F1_A2")
    10 
    11 
    12 class F2(F1):
    13     def __init__(self):
    14         print("")
    15 
    16     def a1(self):  # 4 F3在父类F2找到a1,开始执行。
    17         self.a2()  # 5 self这里变为F3.a2,运行F3.a2,回到F3子类
    18         print("F2_A1")  # 7 最后打印
    19 
    20     def a2(self):
    21         print("F2_A2")
    22 
    23 
    24 class F3(F2):
    25     def __init__(self):
    26         print("")
    27 
    28     def a2(self):  # 6 找到F3.a2,然后打印F3_a2,随后回到父类继续执行F2.a1
    29         print("F3_A2")
    30 
    31 
    32 obj = F3()  # 1
    33 obj.a1()  # 2 F3 = F3.a1,找不到,于是到父类去找

    例子二

     1 class school(object):
     2     """父类的一些基础属性"""
     3     mement = 0 #统计教室和同学数量
     4 
     5     def __init__(self, name, age, cla, sex):
     6         self.name = name
     7         self.age = age
     8         self.cla = cla
     9         self.sex = sex
    10 
    11         self.pay_fee()#调用后每次运行打印pay_fee类方法展示的内容
    12 
    13     def pay_fee(self):
    14         print("开学了%s" % self.name)
    15         school.mement += 1 #有一个学生或老师+1
    16 
    17     def __del__(self):
    18         school.mement -= 1
    19         print("%s退学啦" % (self.name))
    20 
    21     def tell(self):
    22         """各个子类信息内容不同,需要变为字典,然后遍历字典里面的内容"""
    23         print("	","----info----%s" % self.name)
    24         for k,v in self.__dict__.items():
    25             print("	",k,v)
    26         print("	","---------------")
    27 
    28 class student(school):
    29     """学生"""
    30     def __init__(self, name, age, cla, sex, score, fee):
    31         school.__init__(self, name, age, cla, sex)
    32         self.score = score
    33         self.fee = fee
    34 
    35     def clss(self):
    36         print("%s同学今年%s岁,%s,是个%s,入学考试%s分,交了%s元" % (self.name, self.age, self.cla, self.sex, self.score, self.fee))
    37 
    38 
    39 class teacher(school):
    40     """教师"""
    41     def __init__(self, name, age, cla, sex, course, grade):
    42         school.__init__(self, name, age, cla, sex)
    43         self.course = course
    44         self.grade = grade
    45 
    46     def teaching(self):
    47         print("%s老师今年%s岁,%s,是个%s,科目%s,等级%s" % (self.name, self.age, self.cla, self.sex, self.course, self.grade))
    48 
    49 
    50 t1 = student("李雷", "18", "四年级一班", "男孩", "300", "140000")
    51 t2 = teacher("彪狗", "66", "四年级一班", "人妖", "语文", "低水平")
    52 
    53 t1.tell()
  • 相关阅读:
    160912、工具类:spring+springmvc自定义编码转换
    160909、Filter多方式拦截、禁用IE图片缓存、Filter设置字符编码
    160908、前端开发框架Semantic UI
    160907、CSS 预处理器-Less
    160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    160905、c3p0详细配置
    160902、Ionic、Angularjs、Cordova搭建Android开发环境
    160901、在大型项目中组织CSS
    160831、过滤器和拦截器的区别
    (转)Uiautomator——API详解
  • 原文地址:https://www.cnblogs.com/jesse-gong/p/7815919.html
Copyright © 2011-2022 走看看