总结下抽象类Abstract和虚方法Virtual(易混点)

1.普通类中可以有普通方法和虚方法,在被继承时,虚方法可以选择重写(override)或者不重写

2.抽象类中可以有普通方法和虚方法和抽象方法,当被继承时 如下

 1.普通方法不能被子类重写

 2.虚方法可以选择被子类重写(override)也可以不被重写

3.抽象方法必须被子类重写(override)

原文地址:https://www.cnblogs.com/lixipeng/p/11173377.html

时间: 2024-08-05 02:11:03

总结下抽象类Abstract和虚方法Virtual(易混点)的相关文章

虚方法virtual详解

虚方法virtual详解 从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,那个执行时实例化的类叫实例类. 如:飞禽 bird = new 麻雀();那么飞禽就是申明类,麻雀是实例类. 具体的检查的流程如下 1.当调用一个对象的函数时,系统会直接去检

虚方法virtual、抽象方法abstract、接口interface区别

接口.抽象类.抽象方法.虚方法: 这四个名词时非常容易混淆的: 首先说一下接口 与抽象类 的异同: 相同点: 1.他们都不能实例化自己,也就是说都是用来被继承的. 2.抽象类中的抽象方法和接口方法一样,都不能有方法体 不同点: 1.抽象类里可以有字段,接口中不能有字段. 2.抽象类中的普通方法可以有方法体,而接口方法没有方法体. 3.接口中的方法不能有访问修饰符,抽象类中的抽象方法被继承,需要override重写 . 4.接口更像是一种规范,一种约束. 5.一个子类只能继承一个抽象类,但却可以继

虚方法(virtual)和抽象方法(abstract)的区别

虚方法和抽象方法都可以供派生类重写. 虚方法必须有实现部分,抽象方法必须没有实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: class Program { static void Main(string[] args) { C c = new C(); D d = new D(); } } abstract class A { public virtual void Sleep() { } public virtual void N(); //报错,虚方法必须有实现

[转]虚方法(virtual)和抽象方法(abstract)的区别

虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: //抽象方法public abstract class Animal{    public abstract void Sleep();    public abstract void Eat();} //虚方法public class Animal{    public virtual void Sleep(){}

【转】C#虚方法virtual详解

转:https://www.cnblogs.com/zhaoshujie/p/10502404.html 在C++.Java等众多OOP语言里都可以看到virtual的身影,而C#作为一个完全面向对象的语言当然也不例外. 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其

继承小试牛刀:虚方法virtual

#include<iostream>using namespace std;class Point{public:    Point(double a=0,double b=0):xx(a),yy(b){}   virtual double x(){return xx;}   virtual double y(){return yy;}private:    double xx,yy;};class t_Point :public Point{public:    t_Point(double

C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)

9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多态,一种是运行时多态. 方法重载: 方法重载就是,多个方法拥有相同的方法名称,而参数个数或类型不同. 下面就是一个多态的例子,可以看到方法名称“BedRoom”被用到了2个方法中,就是2个方法有共同的方法名称"BedRoom",但是2个方法的参数是不同的. 1 class HouseOwn

接口 抽象类 虚方法 三者比较-1

接口 1.接口只提供方法规约,不提供方法体: 2.接口中的方法不能用关键字修饰: 3.接口里不能有接口和变量: 4.接口里的方法在子类中必须全部实现: 5.接口可以实现多重继承: 抽象类 1.抽象类可以从接口继承: 2.抽象类中的实体方法在子类中不可以重写,只可以被引用: 3.抽象类中的抽象方法不可以有方法体,抽象类中的抽象方法在子类中必须重写: 4.抽象类中的虚方法在子类中可以选择性的重写: 虚方法 1.可以在子类选择性的重写: 2.不重写也可被子类调用: 接口与抽象类的异同 1.抽象类的抽象

多态,虚方法重写,抽象类,接口

简而言之就是龙生九子,各有不同 有了继承,才有了多态 1.虚方法 virtual重写 override 父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写 子类重写父类的方法使用的是override关键字 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 多态 { public