12-14面向对象--抽象基类、接口、委托

一、抽象类与抽象方法

1、在一个类前面加上abstract关键字,此类就成为了抽象类。

1)当一个类变成抽象类时,就不能作为一个对象使用了,也就是说不能创建新对象,不能new初始化。

2)抽象方法只是一个方法,不能写方法

3)当一个类继承的是抽象类时,必须要把抽象类的抽象方法重写(override)才可以实现方法。

4)抽象方法必须放在抽象类里面才能使用,抽象方法是在抽象子类中实现的,也就是说抽象子类实现抽象父类所有的抽象方法。

5)有抽象方法的一定是抽象类;有抽象类但不一定有抽象方法。

6)必须通过抽象子类点出父类的抽象方法,才能输出方法的值;

结论:抽象类只能作为父类使用。

2、抽象方法

【注意事项】抽象方法不能有实现方法,在函数名后直接跟一个分号;要想实现抽象方法,必须有抽象子类才能实现方法。

在抽象类(父类)中定义方法:

在抽象子类中实现:

3、抽象属性(封装)

二、接口

定义:关键字interface用于定义接口。

【注意事项】

1、一个子类可以继承多个接口,解决了一个子类只能继承一个父类的属性和方法。

2、在接口里,如果子类继承了方法,就必须实现这个方法。

在接口里面,既不能定义属性、方法,也不能定义字段。

三、委托(delegate

理解:委托可以看成是一个函数的容器,可以引用任何一个满足其要求的函数。

举例:委托就相当于螺丝刀的“底座”,要使用什么样的螺丝刀样式(平口的、梅花口的、十字型的)是事先规定好,只要符合条件就会被放在底座上。

定义:委托可以看做是一种数据类型,可以用于定义变量,但他是一种特殊的数据类型,它所定义的变量能接收的数值只能是一个函数。

如何使用使用方法:

时间: 2024-10-22 09:08:04

12-14面向对象--抽象基类、接口、委托的相关文章

C#编程语言与面向对象——抽象基类与接口

在一个类前加“abstract”关键字,此类就成为抽象类. 对应的,在一个方法前加“abstract”关键字,此方法就成为抽象方法. abstract class Fruit //抽象类 { public abstract void GrowInArea();//抽象方法 } 注意抽象方法不能又实现代码,在方法名后直接跟一个分号. 抽象类专用于派生出子类,子类必须实现抽象类中所生命的方法.否子子类仍是抽象类. 抽象类一般用于表达一种比较抽象的事物,比如说“水果”,而抽象方法则说明此抽象类应该具有

C# 面向对象 , 抽象基类

抽象基类 关键字,  abstract abstract class SSS { public void aaa() { } } 作为抽象基类, 只能在 继承关系 中 担任父类的角色,不能出现在其他地方. 不能建对象. 抽象类里面的 方法(函数)不能直接实现, 必须在子类实现. 关键字  override ---------只对属性有用(带大括号的) class override EEE : SSS { public void aaa() { } } 抽象新建 SSS p = new EEE()

6、面向对象以及winform的简单运用(抽象基类与接口)

抽象类与抽象方法 1.书写规范: 在类前面加上abstract关键字,就成为了抽象类:在一个方法前面加上abstract关键字,就成为了抽象方法(抽象方法不能有实现方法,直接在后面加分号) 例: abstract class Chouxiang //抽象类 { public abstract void fangfa(); //抽象方法 } 2.抽象类的注意事项: 1)当一个类变为抽象类之后就不能作为对象来使用了,无法new出来 2)抽象方法必须放在抽象类里面(但抽象类中不一定有抽象方法) 3)没

Python 接口:从协议到抽象基类

抽象基类的常见用途:实现接口时作为超类使用.然后,说明抽象基类如何检查具体子类是否符合接口定义,以及如何使用注册机制声明一个类实现了某个接口,而不进行子类化操作.最后,说明如何让抽象基类自动“识别”任何符合接口的类——不进行子类化或注册. Python文化中的接口和协议 接口在动态类型语言中是怎么运作的呢?首先,基本的事实是,Python语言没有 interface 关键字,而且除了抽象基类,每个类都有接口:类实现或继承的公开属性(方法或数据属性),包括特殊方法,如__getitem__ 或 _

面向对象程序设计——抽象基类,访问控制与继承,继承中的类作用域,拷贝函数与拷贝控制

一.抽象基类 1)纯虚函数 和普通的虚函数不同,一个纯虚函数无须定义.我们通过在函数体的位置(即在声明语句的分号之前)书写=0就可以将一个虚函数说明为纯虚函数.其中,=0只能出现在类内部的虚函数声明语句处. 值得注意的是,我们也可以为纯虚函数提供定义,不过函数体必须定义在类的外部.也就是说,我们不能在类的内部为一个=0的函数提供函数体. 2)含有纯虚函数的类是抽象基类 含有(或者未经覆盖直接继承)纯虚函数的类是抽象基类.抽象基类负责定义接口,而后续的其他类可以覆盖该接口.我们不能直接创建一个抽象

五、抽象基类与接口

5.1 抽象类与抽象方法 在一个类前面加上“abstract”关键字,此类就成为了抽象类. 对应的,一个方法类前面加上“abstract”关键字,此方法就成为了抽象方法. abstract class Fruit   //抽象类 { public abstract void GrowInArea();  //抽象方法 } 注意抽象方法不能有实现代码,在函数名后直接跟一个分号. 抽象类专用于派生出子类,子类必须实现抽象类所声明的抽象方法,否则,子类仍是抽象类. 抽象类一般用于表达一种比较抽象的事物

抽象基类与接口

5.1抽象类与抽象方法 在一个类前面加上“abstract”关键字,此类就成为了抽象类. 对应地,一个方法类前面加上“abstract”关键字,此方法就成为了抽象方法. 注意抽象方法不能有实现代码,在函数名后直接跟一个分号. 抽象类专用于派生出子类,子类必须实现抽象类所声明的抽象方法,否则,子类仍是抽 象类. 抽象类一般用于表达一种比较抽象的事物,比如前面所说的“水果”,而抽象方法则说 明此抽象类应该具有的某种性质,比如 Fruit类中有一个抽象方法  GrowInArea(),说明水果 一定有

定义接口或者抽象基类

你想定义一个接口或抽象类,并且通过执行类型检查来确保子类实现了某些特定的方法. 解决方案: 使用 abc 模块可以很轻松的定义抽象基类 from abc import ABCMeta, abstractmethod class IStream(metaclass=ABCMeta): @abstractmethod def read(self, maxbytes=-1): pass @abstractmethod def write(self, data): pass 抽象类的一个特点是它不能直接

OOP2(虚函数/抽象基类/访问控制与继承)

通常情况下,如果我们不适用某个函数,则无需为该函数提供定义.但我们必须为每个虚函数都提供定义而不管它是否被用到了,这因为连编译器也无法确定到底会适用哪个虚函数 对虚函数的调用可能在运行时才被解析: 当某个虚函数通过指针或引用调用时,编译器产生的代码直到运行时才能确定应该调用哪个版本的函数.被调用的函数是与之绑定到指针或引用上的对象的动态类型相匹配的那一个 注意:动态绑定只有当我们通过指针或引用调用虚函数时才会发生.当我们通过一个具有普通类型(非引用非指针)的表达式调用虚函数时,在编译时就会将调用