接口类和抽象类(代码片段)

monkey-code monkey-code     2022-11-28     654

关键词:

抽象类和接口类

首先需要明确的是接口类和抽象类是由java语言中发展来的概念,它是java中的一种设计规范或方法。

Python提供了对抽象类的支持借助于 abc 模块

Python中可以沿用接口类的概念编程但是 Python不提供具体的实现方式,也就是说 Python中并没有接口类 但是依然可以使用接口类的设计方式来规范代码

接口类的设计提倡功能设计的简单,专一,不要将接口设计的臃肿而复杂。接口需要尽可能的降低耦合,遵循接口隔离原则。

抽象类推荐单继承,接口类的使用鼓励多继承(细化接口,依据实际需求把握粒度)。

抽象类

抽象类是抽取多个功能具有相似点的类而形成的新类,由于它是多个类的共同点的抽象,因此它天生就是为继承而存在。

抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

允许在类内部实现某些方法,抽象类的内部允许一般的实例方法,而不一定都要是抽象方法

抽象类要将子类中一致的方法实现,这样避免在多个子类中重复的实现一样的方法造成冗余。例如BasePerson类中实现了sleep方法,因为所有的人都会睡觉,且睡觉的行为一致。但是say方法没有实现,因为不同的角色说话的方式是不同的,需要在子类中自己来实现。

接口类

严格的讲Python中就没有 接口类这么个东西。仅仅对抽象类提供支持 abc。但是接口隔离的思想依然是可以用的。靠程序员自己来约束,不要被定义和名称框死,也没必要过分纠结~ 。毕竟我们最终目的是写出优雅稳健的代码。

  • 接口类中不允许有构造方法
  • 接口类中必须不能实现任何方法
  • 接口类定义需要遵循接口隔离原则和单一化原则
  • 接口隔离:尽可能的将接口粒度细化。
  • 单一原则:尽可能将接口的职责单一化。

例子

import abc


class Developer(metaclass=abc.ABCMeta):
    """这个 看似他遵循了接口类的定义~ 但是仅仅是为了遵循接口隔离设计思想。"""
    @abc.abstractmethod
    def coding(self):pass

    @abc.abstractmethod
    def debug(self):pass


class Teacher(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def teach(self):pass


class BasePerson(metaclass=abc.ABCMeta):
    """ 抽象类"""
    @abc.abstractmethod
    def say(self):pass  # 抽象方法

    def sleep(self):    # 可以实现方法,并且不要求子类必须实现这个方法。
        print("我会睡觉")


class ComputerTeacher(BasePerson,Developer,Teacher):
    def coding(self):
        print("我会编程")

    def teach(self):
        print("我会教学生")

    def say(self):
        print("我将会教学生一些编程的方法和技巧!")

    def debug(self):
        print("天天就会写bug!!!")


a = ComputerTeacher()
a.say()
a.sleep()
a.teach()
a.coding()
a.debug()

接口类和抽象类(代码片段)

抽象类和接口类首先需要明确的是接口类和抽象类是由java语言中发展来的概念,它是java中的一种设计规范或方法。Python提供了对抽象类的支持借助于abc模块Python中可以沿用接口类的概念编程但是Python不提供具体的实现方式,也... 查看详情

抽象类和接口(代码片段)

抽象类的含义  被abstract修饰符修饰的类称为抽象类,当一个类中有抽象方法时必须被定义为抽象类,但抽象类中可以有非抽象的普通方法,也可以有普通成员变量,抽象类不能被实例化packagecom.coffer.core.modules.sys.web;publicabstrac... 查看详情

抽象类和接口(代码片段)

一抽象类  抽象类(abstractclass):一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类,在类头用abstract修饰符表示。  抽象方法(abstractmethod):只有方法声明,而没有具体方法体的方法。这样... 查看详情

抽象类和接口(代码片段)

抽象类:  1.表示现实世界的抽象概念(动物对于猪)  2.不能用来创建对象,只能用来定义类型或则继承并重写相关函数或指针  3.抽象类内部函数没有具体实现抽象类的实现:  1.当类中定义了纯虚函数,这个类就是... 查看详情

抽象类和接口(代码片段)

抽象类:  1.抽象类不能实例化对象  2.抽象类存在的目的是为了让子类继承  3.抽象类的定义和普通类定义一样,只不过前面需要加一个关键字,abstract  4.抽象类里面一般都要有抽象方法(可以没有),抽象方法是用... 查看详情

抽象类和接口(代码片段)

抽象类(abstract)包含一个抽象方法的类必须是抽象类抽象类和抽象方法都是用abstract关键字声明抽象方法只需要声明而不需要实现抽象类必须被子类继承子类不是抽象类时必须重写父类中的所有抽象方法子类是抽象类时仍可以... 查看详情

抽象类和接口(代码片段)

目录抽象类抽象类的定义抽象类的举例抽象类的声明接口接口的定义接口的实现接口的继承 接口的作用作业 抽象类抽象类的定义在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的... 查看详情

抽象类和接口(代码片段)

抽象类不能定义对象!加上关键字virtual,仅仅有函数的声明就可以了,就成为了抽象类#include<iostream>#include<string>usingnamespacestd;classShapepublic:virtualdoublearea()=0;;classRect:publicShapeintm 查看详情

抽象类和接口的区别(代码片段)

a.接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法。b.一个类可以实现多个接口,而只能继承一个抽象父类。c.接口与实现它的类不构成继承体系,而抽象类是属于一个类的继承体系。d.接口中的方法默认... 查看详情

抽象类和接口的区别(代码片段)

a.接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法。b.一个类可以实现多个接口,而只能继承一个抽象父类。c.接口与实现它的类不构成继承体系,而抽象类是属于一个类的继承体系。d.接口中的方法默认... 查看详情

java—爆肝1w字❤只为弄懂抽象类和接口(代码片段)

抽象类与接口抽象类定义和语法理解抽象类作用抽象类总结:接口概念接口特性注意事项:实现多个接口接口使用实例Clonable接口和深拷贝抽象类和接口的区别?抽象类定义和语法包含抽象方法的类,叫做抽象类... 查看详情

java基础5:抽象类和接口(代码片段)

本节主要介绍了抽象类和接口的特性和使用方法。1.抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder.2.接口一般指一种规定,比如一个map接口中,可能需要实... 查看详情

抽象类和接口(代码片段)

在Java中,抽象类接口是面向对象的重要体现。抽象类抽象类基于继承的概念。用abstrac关键字修饰,抽象类定义了一组抽象的方法,抽象方法的具体实现由子类来完成。抽象方法的声明:abstractvoidprint();抽象方法也是用abstract来修... 查看详情

java--多态,抽象类和接口(代码片段)

一、抽象类1、抽象类定义在class前添加abstract关键字publicabstractclassAbstractClass2、抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的3、final和abstract不能联合使用,这两个关键字是对立的4、抽象... 查看详情

python抽象类和接口类(代码片段)

一、接口类    继承的两种用途:  1、继承基类的方法,并且做出自己的改变或者扩展(代码重用)  2、声明某个子类兼容于某个基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名) 且并未实... 查看详情

java中抽象类和接口的区别?(代码片段)

...象方法不能用private修饰//如何声明abstractvoidfunc();什么是接口?接口是一种规范publicinterfaceinter //声明方法和变量 publicabstractvoidfunc();//默认publicabstract修饰 inta=2;//默认publicfinalstatic修饰必须赋值操作 defultvoidfunc1() //default修饰可以实... 查看详情

抽象的基础类和接口(代码片段)

...序时,我们经常都希望基础类只为自己的衍生类提供一个接口。也就是说,我们不想其他任何人实际创建基础类的一个对象,只对上溯造型成它,以便使用它们的接口。为达到这个目的,需要把那个类变成“抽象”的——使用abs... 查看详情

java抽象类和接口4000+字深度剖析(代码片段)

...‍🚀码云仓库:补集王子的代码仓库Java抽象类和接口1.抽象类1.1抽象类概念1.2抽象类语法1.3抽象类特性1.3.1抽象类不能直接实例化对象1.3. 查看详情