C#之类的继承、抽象类和虚方法】的更多相关文章

代码下载地址 类的继承: 写电池的基类:包含条码和箱体码两个字段,含有两个参数的构造函数 class Battery { public string _barCode; public string _boxCode; public Battery(string barcode, string boxcode) { this._barCode = barcode; this._boxCode = boxcode; } public void ShowInformation() { Console.…
一:什么是js抽象类与虚方法 虚函数是类成员中的概念,是只做了一个声明而未实现的方法,具有虚函数的类就称之为抽象类,这些虚函数在派生类中才被实现.抽象类是不能实例化的,因为其中的虚函数并不是一个完整的函数,不能被调用.所以抽象类一般只作为基类被派生以后再使用.和类的继承一样,JavaScript并没有任何机制用于支持抽象类.但利用JavaScript语言本身的性质,可以实现自己的抽象类. 二: 在JavaScript实现抽象类 在传统面向对象语言中,抽象类中的虚方法必须先被声明,但可以在其他方法…
多态之抽象类与虚方法的相似点及不同点 : 不同点 1.方法关键字不一样 虚方法的方法关键字是:virtual. 抽象类的方法关键词是:abstract 2.基类的方法是否有方法体/实现 虚方法的方法:声明并实现方法. 抽象类的方法:只作声明,无方法体/无实现. 共同点 1.子类/派生类都要重写父类的方法:关键字override. 其他的暂时未想到,笔记先分享到这里!欢迎各位大神评论.纠错.及补充!O(∩_∩)O谢谢.…
9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多态,一种是运行时多态. 方法重载: 方法重载就是,多个方法拥有相同的方法名称,而参数个数或类型不同. 下面就是一个多态的例子,可以看到方法名称“BedRoom”被用到了2个方法中,就是2个方法有共同的方法名称"BedRoom",但是2个方法的参数是不同的. class HouseOwner…
前言    学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷.每次敲代码的时候都没有一种随心所欲的感觉.所以不得不在网上搜集一些资料,look 了 look~ 内容    接触了C#很长时间了,现在总结一下C#类关键字(abstract.virtual.override.sealed(这是新接触的).new)的使用和它的体现. 1.C#中用abstract声明抽象类.抽象方法: 抽象类不能直接实例化,必须由派生类实现. 抽象方法所在类必须为抽象类. 抽象方法中不包含…
微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/abstract-and-sealed-classes-and-class-members 抽象类和类成员 通过在类定义前面放置关键字 abstract,可以将类声明为抽象类. 例如: public abstract class A { // Class members here. } 抽象类不能实例化. 抽象类的…
#include <bits/stdc++.h> using namespace std; class A { public: void Show() { cout << "A" << endl; } } ; class B : public A { public: virtual void Show() { cout << "B" << endl; } } ; class C : public B { p…
1抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖.如果不覆盖,则其具体派生类必须覆盖它们.如: using System; public abstract class A //抽象类A { ; public int Num //抽象类包含属性…
一.理解:抽象方法,虚方法,接口,事件 描述: 1.定义一个抽象父类"People": 要求: 1>3个属性:名字,性别,年龄: 2>一个普通方法"说话"; 3>2个抽象方法:"喜欢什么","会做什么" 4>1个虚方法"母语" 5>定义一个接口,用于唱歌 2.分别创建3个子类:学生,老师,校长 要求:都继承抽象类People,而且都实现唱歌接口,老师覆写虚方法"母语&…
一.虚方法(virtual) 作用:当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法. 示例: class Person { public virtual void XXX() { Console.WriteLine("我有一个梦想,那就是动身去往远方!!"); } } class Boy : Person { public override void XXX() { Console.WriteLine("我不想继承父类的虚方法"); } public…
1.继承(1)创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类的所有字段开辟空间,只不过父类私有的成员访问不到(2)子类从父类继承父类所有的非私有成员,但是父类的所有字段也会创建,只不过父类私有的成员访问不到(3)base关键字可以调用父类的非私有成员(4)子类的访问级别不能比父类高,原因是访问子类的同时也访问了父类,如果子类的访问级别不能比父类高,就矛盾了(5)创建子类的时候,会先调用子类的构造函数,然后调用父类的构造函数,然后执行父类的构造函数,最后再执行子类的构造函数…
概念: 在上一节课中学习了如何定义类,用类当做模板来声明我们的数据. 很多类中有相似的数据,比如在一个游戏中,有Boss类,小怪类Enemy,这些类他们有很多相同的属性,也有不同的,这个时候我们可以使用继承来让这两个类继承自同一个类. 分类: 实现继承: 表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数. 在实现继承中,派生类型采用基类型的每个函数的实现代码,除非在派生类型的定义中指定重写某个函数的实现代码. 在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,…
多态 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 编译时的多态性:编译时的多态性是通过重载来实现的.对于非虚的成员来说,系统在编译时,根据传递的参数.返回的类型等信息决定实现何种操作. 运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作.C#中,运行时的多态性通过虚成员实现. 编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点. 实现多态: 接口…
虚方法 抽象类与抽象方法 1.书写规范: 在类前面加上abstract关键字,就成为了抽象类:在一个方法前面加上abstract关键字,就成为了抽象方法(抽象方法不能有实现方法,直接在后面加分号) 例: abstract class Fruit //抽象类 { public abstract void GrowInArea(); //抽象方法 } 2.抽象类的注意事项: 1)当一个类变为抽象类之后就不能作为对象来使用了,无法new出来 2)抽象方法必须放在抽象类里面(但抽象类中不一定有抽象方法)…
定义抽象类和抽象方法: abstract 抽象类特点: 1.不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例 2.一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法 3.通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现 4.一个抽象类能够继承另一个非抽象类,另外,继承了基类的方法,添加新的抽象和非抽象方法是可行的 5.一个抽象类也能从一个接口来实现,这种情况,我们必须为…
2016年的第一篇文章,容我先喷喷新年的情怀,..........,好了,喷的差不多了. 在面向对象中,我们需要对类进行横向和纵向的认识,不同的类有不同特色的成员,同时在不同类的继承中,子类获得父类的成员也是丰富多彩. 先概述: 1.抽象类 抽象类中不是所有的方法都是抽象方法,对于单纯抽象类而言,是限制类的实例化,可以没有抽象方法.甚至没有任何成员也没事.          2.抽象方法             抽象方法的目的是为了让派生类实现其方法,抽象的方法不实现,抽象方法没有方法体,没有大…
[抽象类]abstract 修饰符可与类和方法一起使用定义抽象类的目的是提供可由其子类共享的一般形式.子类可以根据自身需要扩展抽象类.抽象类不能实例化.抽象方法没有函数体.抽象方法必须在子类中给出具体实现.在以下情况下,某个类将成为抽象类:★ 当一个类的一个或多个方法为抽象方法时.★ 当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时.★ 当一个类实现一个接口,并且没有为所有抽象方法提供实现细节或方法主体时. abstract class Employee {    pub…
Timer.每隔一段时间触发一个事件.不可视控件.Interval.Enabled.Tick事件.计量单位:ms(毫秒). 1秒=1000毫秒.取当前时间      DateTime.Now.ToString().pictureBox1.Load(@"D:\www\mm\00_01.jpg").  i.ToString("00")  GDI+:命名空间:System.Drawing;(基本绘图操作).Graphics对象,可以理解为一只画笔,要在哪个控件上绘图,就要…
c#只能继承一个基类和多个接口(0+) 父类:Human: class Human { public virtual Move() { Console.WriteLine("Human的虚方法"); } public viod Play() { Console.WriteLine("Human的Play方法"); } } 子类:Chinese: class Chinese:Human { public override void Move() { Console.W…
我们知道通过一个指向之类的父类指针可以调用子类的虚方法,因为子类的方法会覆盖父类同样的方法,通过这个指针可以找到对象实例的地址,通过实例的地址可以找到指向对应方法表的指针,而通过这个方法的名字就可以确定这个方法在方法表中的位置,直接调用就行,在多继承的时候,一个类可能有多个方法表,也就有多个指向这些方法表的指针,一个类有多个父类,怎么通过其中一个父类的指针调用之类的虚方法? 其实前面几句话并没有真正说清楚,在单继承中,父类是怎么调用子类的虚方法的,还有多继承又是怎么实现这点的,想知道这些,请认真…
1.编译器必须实现出C++语言的特性.一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节.但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响.因此,有必要了解内部实现的细节. 2.首先考虑虚方法,虚方法是用来实现多态的.多态是指对于指针和引用,表面类型和真实类型不一致的情况下,调用真实类型的虚方法. 3.虚方法有关的实现细节为: a.父类有一个虚方法表(vtbl),可以认为是一个方法指针的数组(这里注意:对于数组,我们知道元素的类型必须一致,虚方法表中的虚方法类型是…
继承:继承属于单继承,只能继承一个父类. 继承的一个结果是派生于基类的子类在方法和属性上有一定的重叠. 继承只能够同时继承与一个基类:可以同时继承一个基类和多个接口,但是基类必须放在第一个.(注:C#没有多继承,如果非得想用多继承形式,只能使用接口) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespac…
虚方法/非虚方法 < 实例方法 = 非静态方法 = 非类方法(非实例方法 = 静态方法 = 类方法) 函数签名(参数列表,或参数列表 + 返回类型) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace m1w3d5_virtual { #region 多态 用虚方法实现 //多态实现 真的鸭子嘎嘎叫…
1.虚方法 我在这动物类中定义了一个虚方法 Dosth class Animal { public int Aid; public string Name; public void SetAid(int i) { Aid = i; } public void SetName(string s) { Name = s; } public virtual string Dosth() { return null; } } 然后定义了一个猫的类和狗的类  都继承于动物类 class Dog : Ani…
总结: 1. 在继承上, new/override没区别 2. 在多态上,new不支持多态,override支持 在C#中改变类中相同名称的方法的实现过程中有三种方式:重载.重写和覆盖. 重载:指具有相同的方法名,通过改变参数的个数或者参数类型实现同名方法的不同实现. 重写:则是只在继承中,子类通过override关键字修饰方法,实现父类和子类相同方法的不同实现,注意,父类方法必须是用virtual或者abstract关键字修饰的虚方法或者抽象方法 覆盖:则是指在继承中,子类通过在与父类相同方法…
1.普通类中可以有普通方法和虚方法,在被继承时,虚方法可以选择重写(override)或者不重写 2.抽象类中可以有普通方法和虚方法和抽象方法,当被继承时 如下 1.普通方法不能被子类重写 2.虚方法可以选择被子类重写(override)也可以不被重写 3.抽象方法必须被子类重写(override)…
面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的demo,针对不同文件类型使用不同方式打开. 在这个案列中多态的要素 "同一行为"在这个实例中指的就是"打开文件"这个行为,打开文本文件和打开音乐文件都是"打开"行为,但是不同文件打开的结果是不一样的. 这里我们可以把"打开文件"这…
前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向对象的魅力体现了出来,那就是多态,多态用的好,可以提高程序的扩展性.常用的设计模式,比如简单工厂设计模式,核心就是多态. 其实多态就是:允许将子类类型的指针赋值给父类类型的指针.也就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方…
1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; } set { _name=value; } } public int Age { get; set; } }  2.索引器 //外部调用 person p=new person; sting str=p[] public class person { private string _name; p…
1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化.但接口是一个行为的规范,里面的所有东西都是抽象的!一个类只可以继承一个基类也就是父类,但可以实现多个接口PS:接口除了规范一个行为之外,在具体项目中的实际作用也是十分重要的,在面向对象的设计原则以及设计模式的使用中,无不体现作为一个接口的…