抽象方法

python 定义并使用抽象基类

我们两清 提交于 2019-11-28 05:07:29
一、定义一个抽象基类 我们现在定义一个抽象基类 ,它的职责之一是,支持用户提供随 机挑选的无重复类。 受到“栈”和“队列”(以物体的排放方式说明抽象接口)启发,我将使用现实世界中的 物品命名这个抽象基类:宾果机和彩票机是随机从有限的集合中挑选物品的机器,选出的 物品没有重复,直到选完为止,我们把这个抽象基类命名为 Tombola。 Tombola 抽象基类有四个方法,其中两个是抽象方法。 抽象方法 1, .load(…):把元素放入容器。 2,.pick():从容器中随机拿出一个元素,返回选中的元素。 具体方法 1, .loaded():如果容器中至少有一个元素,返回 True。 2,.inspect():返回一个有序元组,由容器中的现有元素构成,不会修改容器的内容(内 部的顺序不保留)。 import abc # 自己定义的抽象基类要继承 abc.ABC。 class Tombola(abc.ABC): # 抽象方法使用 @abstractmethod 装饰器标记,而且定义体中通常只有文档字符串。 @abc.abstractmethod def load(self, iterable): """ 从可迭代对象中添加元素。 """ # 根据文档字符串,如果没有元素可选,应该抛出 LookupError。 @abc.abstractmethod def pick(self): """

Java abstract

喜你入骨 提交于 2019-11-28 05:02:50
/* * abstract:抽象的 * 声明:不写函数体的函数,可以叫声明 * 修饰方法:抽象方法 * 修饰类:抽象类 * 修饰类----抽象类:在继承中,提取父类方法的时候,每个子类都有自己具体的方法实现,父类不能决定他们各自的实现方法 * 所以父类干脆就不管了,在父类中只写方法的声明(负责制定一个规则),将方法的实现交给子类.在类中只有方法声明的方法叫抽象方法,拥有抽象 * 方法的类叫抽象类 * * 抽象类的功能:1.可以节省代码 2.可以制定一批规则 * * 注意点: * 1.抽象类不一定有抽象方法,但是有抽象方法的一定是抽象类. * 2.继承了抽象类的子类一定要实现抽象方法,如果不实现就只能将自己也变成抽象的. * 3.抽象类不能直接创建对象,必须通过子类实现,所以抽象类一定有子类 * * 比较普通类与抽象类: * 1.普通类可以直接创建对象 * 2.抽象类可以有抽象方法 * *比较:final,abstract,static,private * 不能与abstract同时存在的关键字 * 1.final:被final修饰的类不能有子类,方法不能重写,但是abstract必须有子类,必须重写 * 2.static:修饰的方法可以通过类名调用,abstract必须通过子类实现 * 3.private:修饰的方法不能重写,abstract必须重写 */ public class

多态、抽象、接口、final

吃可爱长大的小学妹 提交于 2019-11-28 01:44:06
1:final关键字 ​ (1)是最终的意思,可以修饰类,方法,变量。 (2)特点: A:它修饰的类,不能被继承。 B:它修饰的方法,不能被重写。 C:它修饰的变量,是一个常量。 A:局部变量 a:基本类型 值不能发生改变 b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的 B:初始化时机 a:只能初始化一次。 b:在构造方法完毕前。(非静态的常量) c:常见的给值 定义的时候。(推荐) final int num = 30; 构造方法中。 ​ 2:多态 ​(1)同一个对象在不同时刻体现出来的不同状态。 (2)多态的前提: A:有继承或者实现关系。 B:有方法重写。 C:有父类或者父接口引用指向子类对象。 多态的分类: a:具体类多态 class Fu {} class Zi extends Fu {} Fu f = new Zi(); b:抽象类多态 abstract class Fu {} class Zi extends Fu {} Fu f = new Zi(); c:接口多态 interface Fu {} class Zi implements Fu {} Fu f = new Zi(); (3)多态中的成员访问特点 A:成员变量 编译看左边,运行看左边 B:构造方法 子类的构造都会默认访问父类构造 C:成员方法 编译看左边,运行看右边 D:静态方法

java设计模式----责任链模式

ぃ、小莉子 提交于 2019-11-27 23:52:59
责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式强调的是每一个对象及其对下家的引用来组成一条链,利用这种方式将发送者和接收者解耦。 责任链模式还是很好理解的,责任链模式的应用场景也很多,比如说OA系统的工作流,Struts2的拦截器(Interceptor),servlet的过滤器(Filter) 责任链主要两个角色,一个是抽象处理者角色,一个是具体处理者角色。抽象处理者定义请求方法及连接下家的对象引用。具体处理者则是判断当前请求是否符合自己处理要求,不能处理则交给下家。 这样的话,我们在测试的时候,利用抽象处理者中对象的set方法将具体对象链接起来。然后传入合适参数即可。上代码: 抽象处理对象 ,定义一个具体对象,设置getset方法,定义接收请求方法: package chain; public abstract class Handler { private Handler seccessor; public abstract void handlerQequest(String condition); public Handler getSeccessor() { return seccessor; } public void

设计模式6大原则

有些话、适合烂在心里 提交于 2019-11-27 23:42:00
1.开闭原则(OCP--open close principle) 是面向对象设计中“可复用设计”的基石。 开闭原则中的“开”,指对组件功能的拓展是开放的,当需求发生变动时,能够对原模块进行拓展,使其满足新加进来的需求; 开闭原则中的“闭”,指对原功能代码的改动是封闭禁止的。 因此,实现开闭原则的关键就在于使用“抽象”。把系统的全部可能的行为抽象为一个抽象的底层,这个抽象底层规定了全部详细实现必须提供的方法的特征。而作为系统设计的抽象层,要预见全部可能的拓展,当需要对系统的功能进行拓展时,可以从抽象底层导出一个或多个新的详细实现,能够改变系统的行为。 假如一个系统符合开闭原则,那么它应该具有如下的优点: 1)可复用好。能够在软件开发完毕后,仍然能够对软件进行拓展,添加新的功能,而系统原先的代码不必变动。 2)可维护性好。对于系统原有的组件,不必进行改动,这样保证了原有功能的稳定性 2.单一原则 就一个类而言,它只负责一项职责。这就要求在进行功能划分时,将其划分的更加清楚。 单一职责原则是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,再封装到不同的类或模块中。而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。 注意:单一职责同样也适用于方法。一个方法应该尽可能做好一件事情。如果一个方法处理的事情太多,其颗粒度会变得很粗,不利于重用。 3

面向对象(1)

岁酱吖の 提交于 2019-11-27 22:16:26
第一代:机器语言 第二代:汇编语言 第三代:高级语言 第四代:sql 面向过程与面向对象: 实例分析: 类是对象的抽象,对象是类的实例化,对象是具体的唯一的,而类却是抽象的一类事物不是具体的 的,特征抽象为属性,行为抽象为方法 方法和函数:无论什么方法都是一类事物的行为操作,在某种意义上是依赖类存在的,而函数则是单独的,并不需要类的存在。方法和函数都能够完成某种特定的功能; idea:快捷键:主函数(psvm)打印函数(sout) 访问修饰符 数据类型 变量名 初值(或者默认) 访问修饰符 返回值类型 方法名(形参列表) 方法中的传参都是值传递; 对于字符串:==比较的是地址,equals比较的是两个的值 来源: https://www.cnblogs.com/zrmj/p/11380162.html

Java类与对象及其关系详解

烈酒焚心 提交于 2019-11-27 22:04:04
1 类与对象的关系 类 :(class) 类是一种抽象的概念,是一些具有相似特征事物的总称。 例:动物类----表示一个类,是一个抽象的存在 对象 :是类的一个实现对象,是类的具体的表现形式。 例:老虎,长颈鹿—是具体的存在,是动物类的一种具体表现形式。 2.类 类:是一系列属性和方法定义的集合。 属性:成员变量,就是定义在类中,方法外的变量。 定义方法 数据类型 变量名 = 变量值; 方法:定义的一些功能。 方法的定义: 修饰符 返回值类型 方法名(参数列表){ 实现的功能 } 案例: Person类: 属性(特征): 姓名,年龄,性别 方法(功能): 学习,睡觉 代码: public class Person { private String name; private int age; private String sex; public void study() { System.out.println("学习"); } public void sleep() { System.out.println("睡觉"); } } 3.对象 1.类对象创建 类名 变量名 = new 类名(); 类名: 表示对象的类型(class类的类型,是引用数据类型) 变量名 : 符合标识符的定义规范 = : 表示赋值, 将new在内存中开辟的空间地址值赋值给变量名 new :

抽象类的实例化问题

谁说胖子不能爱 提交于 2019-11-27 22:02:14
抽象类能实例化吗?   本文转自: https://www.cnblogs.com/zyx110/p/ 10648119.html 这个问题我想了一个晚上,看了好几篇别人的博客,但结果都各不相同,每个人有每个人的理解,后来我想明白了: 抽象类不能直接通过new去实例化一个对象,那它就是不能实例化,要获取抽象类的对象, 需要先用一个类继承抽象类, 然后去实例化子类。也可以用匿名内部类,在抽象类中创建一个匿名的子类,继承抽象类,通过特殊的语法实例化子类的对象 。(后面会细说) 现在重点来了,要研究这个问题,前提是你要了解抽象类,万变不离其宗,我们从抽象类的根源谈起 , 深化对抽象类的理解。 首先看这个例子: package com.my.animal; //动物类 public class Animal { String name;//名字 String color;//颜色 public Animal(String name,String color){ this.name = name; this.color = color; } public void run(){ System.out.println(name+"四条腿跑的很快!!!"); } } //狗类继承动物类 class Dog extends Animal{ public Dog(String name,String

普通类、抽象类和接口区别:

时光怂恿深爱的人放手 提交于 2019-11-27 21:30:48
1.普通类可以实例化,接口都不能被实例化(它没有构造方法),抽象类如果要实例化,抽象类必须指向实现所有抽象方法的子类对象(抽象类可以直接实例化,直接重写自己的抽象方法),接口必须指向实现所有所有接口方法的类对象。 2.抽象类要被子类继承,接口要被子类实现。 3.接口只能做方法的声明,抽象类可以做方法的声明,也可以做方法的实现。 4.接口里定义的变量只能是公共的静态常量,抽象类中定义的变量是普通变量。 5.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类的抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如果不能全部实现接口方法,那么该类只能是抽象类。 6.抽象方法只能声明,不能实现。接口是设计的结果,抽象类是重构的结果。 7.抽象类里可以没有抽象方法。 8.如果一个类里有抽象方法,那么该类只能是抽象类。 9.抽象方法要被实现,所以不能是静态的,也不能是私有的。 10.接口可以继承接口,并可多继承接口,但类只能单继承。(重要啊) 11.接口中的常量:有固定的修饰符-public static final(不能用private和protected修饰/本质上都是static的而且是final类型的,不管加不加static修饰)。 12.接口中的抽象方法:有固定的修饰符-public abstract 。 13、接口细节: 若接口中方法或变量没有写public

JAVA面向对象笔记

橙三吉。 提交于 2019-11-27 18:36:56
类class 将一类事物的特征和动作,封装为属性和方法(封装相关数据,方法代码); 封装 实例,一个具体的个体(new创建) 可以保存独立的数据,独立控制执行指定方法; 引用 保存一个实例的地址 引用特殊值null 局部代码块: 在方法中提供一个{}. 局部代码块可以提高栈内存的效率,可以提前释放局部的变量内存。 构造方法 构造代码块:会在每一次创建对象时调用,构造代码块是先与构造方法执行的 使用方式:直接在类中提供一个{} 新建实例时执行,子类调用父类的无参构造方法 class定义类必须要有构造方法 不定义,默认为无参 构造方法作用:任意 常用方法:赋值 this 1.this.属性名---本类里的成员变量,当变量名重复时使用 2.this.方法名------本类的方法名 3.This(……)----本类里的构造方法,减少代码重复 This()只能用在构造方法中的第一行 Overload 方法重载:一个方法有多种参数传递方式 同名不同参数, 继承: 把原有类中的公共的代码抽取到一个新类中,原有类和新类使用extends关键字进行联。新类称之为父类,原有类称之为子类,子类会继承父类的所有属性和方法。但是子类只能使用对子类可见的属性和方法。 JAVA只支持单继承,只能继承一个父类,一个父类可以有多个子类 不继承父类的部分 构造方法 私有成员 private 子类实例