美文网首页
面向对象三大特性之继承

面向对象三大特性之继承

作者: Java架构_师 | 来源:发表于2019-01-16 21:06 被阅读0次

1:继承,顾名思义就是子代继承父辈的一些东西,在程序中也就是子类继承父类的属性和方法。

1 #Author : Kelvin

2 #Date : 2019/1/16 18:57

3

4 class Father:

5    money=1000

6

7    def __init__(self,name):

8        print("父类的init方法...")

9        self.name=name

10

11    def teach(self):

12        print("%s 正在教儿子学习..."%self.name)

13

14 class Son(Father):

15    pass

16

17

18 s=Son("kelvin")

19 print(s)

20 #>>>: 父类的init方法...

21 #>>>: <__main__.Son object at 0x0000018B1A1AEEB8>

22 s.teach()

23 # >>>: kelvin 正在教儿子学习...

可见,即使Son类没有定义init方法,money属性和teach方法,但是由于Son类继承了Father类,所以在实例化Son时可以使用父类的属性值和方法。

误区:如果子类存在与父类同名的属性和方法,并不是覆盖了从父类继承的属性。因为子类会先从本类开始找对应方法,如果没有再去父类调用。

归一化设计(接口继承):

  使用继承的最大作用就是定义一种规范。让继承者按照规范进行书写代码。

  第一种:普通类继承。缺点:不能限制子类根据父类的规范定义函数。

1 #Author : Kelvin

2 #Date : 2019/1/16 19:53

3

4 class Basic():

5

6    def eat(self):

7        pass

8   

9    def drink(self):

10        pass

11

12 class People(Basic):

13    def __init__(self,name):

14        self.name=name

15    def eat(self):

16        print("%s吃饭"%self.name)

17    def drink(self):

18        print("%s喝水"%self.name)

19

20 class Cat(Basic):

21    def __init__(self,name):

22        self.name=name

23    def eat(self):

24        print("%s吃饭"%self.name)

25

26 c=Cat("猫咪")

27 c.eat()

28 c.drink()

很明显,代码可以执行,说明子类即使不按照父类定义的标准执行,也不会报错。很明显父类不能起到规定的作用。接下来可以使用这种实现:

1 #Author : Kelvin

2 #Date : 2019/1/16 19:53

3 import abc

4 class Basic(metaclass=abc.ABCMeta):

5    @abc.abstractmethod

6    def eat(self):

7        pass

8    @abc.abstractmethod

9    def drink(self):

10        pass

11

12 class People(Basic):

13    def __init__(self,name):

14        self.name=name

15    def eat(self):

16        print("%s吃饭"%self.name)

17    def drink(self):

18        print("%s喝水"%self.name)

19

20 class Cat(Basic):

21    def __init__(self,name):

22        self.name=name

23    def eat(self):

24        print("%s吃饭"%self.name)

25

26 c=Cat("猫咪")

27 c.eat()

28 c.drink()

此时,由于Cat类继承了Basic,但是由于Basic类做了限制,继承Basic类必须实现所有Basic中的方法,但是Cat中只实现了部分方法,因此程序报错。

如果在子类中定义了和父类同名的属性和成员方法时,如何才能调用父类属性和方法呢?

1 #Author : Kelvin

2 #Date : 2019/1/16 20:45

3

4 class way:

5    def __init__(self,name,speed):

6        self.name=name

7        self.speed=speed

8    def run(self):

9        print("所有交通工具!")

10

11 class subway(way):

12    def __init__(self,name,speed,line):

13        # way.__init__(self,name,speed)

14        # super(subway, self).__init__()

15        super().__init__(name,speed)

16        self.line=line

17    def run(self):

18        # way.run(self)

19        # super(subway, self).run()

20        super().run()

21        print("地铁交通工具!")

22

23 s=subway("徐州地铁","10km/min","13号线路")

24 s.run()

注释的两种方式可以实现相同效果!

相关文章

  • 【Java】面向对象:继承、组合和多态

    一. 面向对象三大特性之继承 1. 继承的概念 继承(inheritance)机制:是面向对象程序设计使代码可以复...

  • Objective-C初始化方法

    一、继承 面向对象的三大特性:封装,继承,多态。⾯向对象提供了继承特性。继承既能保证类的完整,又能简化代码。面向对...

  • 2019-01-09 Android开发 Java基础知识整理

    JavaSE 基础: 一、Java 面向对象思想 1、面向对象都有哪些特性以及你对这些特性的理解 继承:继承是从已...

  • GeekBand-OC继承与多态

    面向对象三大特性:封装、继承、多态面向对象三大特性 继承 在OC中,继承为单继承。即每个类只能有一个父类,子类自动...

  • 面向对象语言基础

    面向对象语言的特性 面向对象的语言的特性:封装、继承、多态。 面向对象语言的设计原则 面向对象的语言在进行程序设计...

  • 面向对象三大特性(一):封装

    面向对象有三大特性:封装、继承和多态。注意,是面向对象的三大特性而不是Java的三大特性,Java只是面向对象语言...

  • Class 的封装及调用-Python教学【StudyQuant

    前言:面向对象的三大特性是指:封装、继承和多态。论Class 的封装及调用 面向对象三大特性 面向对象的三大特性是...

  • 面向对象

    面向对象有3大特性:封装、继承、多态1、介绍面向对象编程 面向对象编程(Object Oriented Progr...

  • python 高级 面向对象编程(OOP)

    面向对象有3大特性:封装、继承、多态 1、介绍面向对象编程 面向对象编程(Object Oriented Pro...

  • 面向对象特性------继承

    1,为什么要设计继承? 2,通过 " class A extends B " 类实现类的继承。 3,子类继承父类以...

网友评论

      本文标题:面向对象三大特性之继承

      本文链接:https://www.haomeiwen.com/subject/qgevdqtx.html