抽象方法

重写方法,重载方法,虚方法和抽象方法的使用

拈花ヽ惹草 提交于 2020-04-07 07:14:04
重写方法,重载方法,虚方法和抽象方法。 重写: 指子类重新实现父类的某些方法,以实现一些新的功能。重写的关键字是 override。并且重写的方法其签名是相同的。 重载: 指允许类中具有相同函数名的方法,但是其函数签名必须是唯一的(顺序,个数等)。重载的方法是在被调用的时候通过函数签名确定需要调用哪一个方法。 虚方法: 若一个实例方法的声明中含有 virtual修饰符,则称该方法为虚方法 (virtual method)。在调用一个虚方法时,该调用所涉及的那个实例的运行时类型 (runtime type)确定了要被调用的究竟是该方法的哪一个实现。 抽象方法: 抽象方法是没有实现的虚方法。抽象方法只能存在于抽象类中。抽象方法使用 abstract修饰符进行声明。 抽象方法只提供函数的声明,至于函数的实现,必须要在子类中通过重写实现。 重写和虚方法 :C#中的多态性在实现时主要是通过在子类(派生类)中重写基类的虚方法或函数成员来实现的,那么这里就遇到两个概念,一个是虚方法,另一个是重写方法,而这两个方法也是多态中最重要的两个概念,下面分别对它们进行讲解。 1.虚方法 虚方法就是允许被其子类重新定义的方法,在声明时,需要使用virtual修饰符。 注意: (1)virtual修饰符不能与static、abstract或者override修饰符同时使用; (2)由于虚方法不能是私有的,所以

重写方法,重载方法,虚方法和抽象方法。

China☆狼群 提交于 2020-04-07 05:20:59
重写方法,重载方法,虚方法和抽象方法。 重写是指子类重新实现父类的某些方法,以实现一些新的功能。重写的关键字是 override。并且重写的方法其签名是相同的。 重载是指允许类中具有相同函数名的方法,但是其函数签名必须是唯一的(顺序,个数等)。重载的方法是在被调用的时候通过函数签名确定需要调用哪一个方法。 虚方法,若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚方法 (virtual method) 。在调用一个虚方法时,该调用所涉及的那个实例的运行时类型 (runtime type) 确定了要被调用的究竟是该方法的哪一个实现。 抽象方法,抽象方法是没有实现的虚方法。抽象方法只能存在于抽象类中。抽象方法使用 abstract 修饰符进行声明。 抽象方法只提供函数的声明,至于函数的实现,必须要在子类中通过重写实现。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Override_Test { class Program { static void Main(string[] args) { //抽象类不能实例化 fatherClass father = new childClass(); childClass child

C#抽象类、抽象方法、虚方法

我的梦境 提交于 2020-04-07 03:39:46
定义抽象类和抽象方法:   abstract 抽象类特点:   1、不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例   2、一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法   3、通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现   4、一个抽象类能够继承另一个非抽象类,另外,继承了基类的方法,添加新的抽象和非抽象方法是可行的   5、 一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口   6、一个抽象类必须为所有的接口成员提供实现,一个用于实现接口的抽象类可能把接口方法安排到抽象方法上 抽象方法特点:   1、abstract关键字只能用在 抽象类 中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现   2、一个抽象方法可以看作是一个虚函数,抽象方法的声明只能在抽象类中   3、抽象方法声明只提供一个无实现的方式,没有方法体   4、方法体的实现被覆写方法提供,覆写方法是一个非抽象类的成员   5、抽象属性的行为和抽象方法相像,除了不同的声明形式   6、在一个静态属性中使用abstract 是一个错误   7、一个抽象属性能够通过派生类使用 override

虚方法、抽象方法、接口方法

依然范特西╮ 提交于 2020-04-07 03:12:19
1.virtual方法(虚方法) virtual方法用于在基类中修饰子类,会遇到下面2种情况: 情况1:子类没有重写,则子类调用的是基类的方法。 情况2:子类重写了,则子类调用的重写的方法。 2. abstract方法(抽象方法) 抽象方法只是可以在抽象类中出现,并且没有具体的实现。抽象类必须在派生类中通过override实现。派生类必须全部实现父类的方法,否则派生类也需要定义为抽象类。 3.接口方法 接口方法必须出现在接口中,没有方法的实现,只有方法名称,参数和返回值。派生类必须全部实现父类方法。 下面定义几个类具体实现以下: public abstract class Animal { public abstract void Eat(); public virtual void Run() { Console.WriteLine("小动物当然会跑了.."); } } public class Cat:Animal,IAction { public override void Eat() { Console.WriteLine("猫咪吃鱼"); } public void Fly() { Console.WriteLine("猫咪会飞吗?你是不是傻.."); } } interface IAction { void Fly(); } public abstract class

Spring中的设计模式:工厂方法模式

前提是你 提交于 2020-04-06 13:41:54
导读 工厂方法模式是所有设计模式中比较常用的一种模式,但是真正能搞懂用好的少之又少,Spring底层大量的使用该设计模式来进行封装,以致开发者阅读源代码的时候晕头转向。 文章首发于微信公众号【码猿技术专栏】,原创不易,谢谢支持!!! 今天陈某分别从以下五个方面详细讲述一下工厂方法模式: 「从什么是工厂方法模式」 「通用框架实现」 「工厂方法模式的优点」 「工厂方法模式的升级」 「Spring底层如何使用工厂方法模式」 什么是工厂方法模式? 定义:定义一个用于创建对象的 接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 工厂方法模式通用类图如下: 在工厂方法模式中,抽象产品 Product 负责定义产品的特性,实现对事物的抽象定义。 AbstractFactory 是抽象工厂类,定义了一个抽象工厂方法。具体的如何创建产品由工厂实现类 ConcreteFactory 完成。 通用框架实现 工厂方法模式的变种有很多,陈某给出一个比较实用的通用框架。 抽象产品类 : public abstract class Product { /** * 公共逻辑方法 */ public void method1(){} /** * 抽象方法:由子类实现,根据业务逻辑定义多个 */ public abstract void method2(); } 具体产品类1 ,继承抽象产品类

创建型模式:抽象工厂

混江龙づ霸主 提交于 2020-04-06 07:19:18
个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂。 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介绍 : Provide an interface for creating families of related or dependent objects without specifying their concrete classes. 为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。 (来自《设计模式之禅》) 今天讲的是抽象工厂模式,小伙伴可能有疑问,抽象工厂和工厂方法之间都有工厂,那肯定是有什么联系的,具体是什么关系呢?简单的说:工厂方法是在解决一个产品多个层级方面的事情;而抽象工厂致力于解决多个产品多个层级方面的事情。举个例子:汽车是由很多零件组成的,比如引擎、轮胎、方向盘等等。现在如果我们是轮胎生产方,要生产宝马轮胎和奔驰轮胎,要用工厂方法还是抽象工厂实现呢?答案是:工厂方法。轮胎是一个产品,宝马轮胎和奔驰轮胎是 2 个不同层级的轮胎,所以用工厂方法解决就足够。假如现在我们是汽车生产方,要生产宝马汽车和奔驰汽车,汽车又包含轮胎和方向盘等等,要用哪个来实现?既然是上面的是工厂方法,那这个就用抽象工厂,因为这涉及到多个产品(轮胎、方向盘等等)和 2

Java中的抽象类

自古美人都是妖i 提交于 2020-04-06 03:22:15
用abstract修饰的类叫做抽象类。 一、abstract修饰符: abstract修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能new); abstract修饰的方法为抽象方法,此方法不能有方法体(不能有{}); 二、关于抽象类的使用特点: 抽象类不能有对象,(不能用new此关键字来创建抽象类的对象); 有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法; 抽象类中的抽象方法必须在子类中被重写。 来源: https://www.cnblogs.com/Water2Wine/p/12640352.html

Java Abstract class and Interface

寵の児 提交于 2020-04-04 08:44:43
(一)概述 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存 在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有 很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的 选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理 解、对于设计意图的理解是否正确、合理。   abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class 翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意 区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?   在 面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是 所有 的类都是用来描绘对象的(把类具体化),如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的 类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去 不同,但是本质上相同的具体概念的抽象。比如

设计模式——工厂方法模式

我的梦境 提交于 2020-04-04 00:00:11
目录 1. 简介 2. 示例1-计算器重构 2.1 背景说明 2.2 代码重构 2.3 程序类图 3. 示例2-模拟多功能日记记录器 3.1 背景说明 3.2 代码实现 3.3 程序类图 4. 总结分析 4.1 优点 4.2 缺点 4.3 适应场合 4.4 其他说明 5. 参考及源码下载 shanzm-2020年4月3日 22:26:27 1. 简介 工厂方法模式(Factory Method Pattern) 也称为 工厂模式 ,又称为虚拟构造器模式或多态模式。 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式主要类: Product 抽象产品类(或是接口),派生出所有的具体产品类 ConcreteProductA 、 ConcreteProductA …… ConcreteProduct 具体产品类,继承于 Product 抽象类 Factory 抽象工厂接口,所有的具体工厂类都是实现该接口 ConcreteFactory 具体工厂,实现了 Factory 接口,创建具体的产品对象 注:在GoF的《设计模式:可复用面向对象软件的基础》,对工厂方法模式的描述中使用的是 Creator接口,其含有

PHP的抽象类和接口

谁都会走 提交于 2020-04-03 18:07:50
抽象类与接口相似,都是一种比较特殊的类。抽象类是一种特殊的类,而接口也是一种特殊的抽象类。它们通常配合面向对象的多态性一起使用。虽然声明和使用都比较容易,但它们的作用在理解上会困难一点。 ①抽象类 在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问它的接口。而抽象方法就是为了方便继承而引入的。本节中先来介绍一下抽象类和抽象方法的声明,然后再说明其用途。在声明抽象类之前,我们先了解一下什么是抽象方法。抽象方法就是没有方法体的方法,所谓没有方法体是指在方法声明时没有花括号及其中的内容,而是在声明方法时直接在方法名后加上分号结束。另外在声明抽象方法时,还要使用关键字abstract来修饰。声明抽象方法的格式如下所示: abstract function fun1(); //不能有花括号,就更不能有方法体中的内容了 abstract function fun2(); //直接在方法名的括号后面加上分号结束,还要使用abstract修饰 只要在声明类时有一个方法时抽象方法,那么这个类就是抽象类,抽象类也要使用abstract关键字来修饰。在抽象类中可以有不是抽象的成员方法和成员属性,但访问权限不能使用private关键字修饰为私有的。下面的例子在Person类中声明了两个抽象方法say()和eat(),则Person类就是一个抽象类