温故知新(2)虚方法、隐藏方法、抽象类
来源:互联网 发布:game.min.js 编辑:程序博客网 时间:2024/06/01 10:37
虚方法:
1、virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑.
2、virtual方法可以直接使用,和普通方法一样
3、不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别
4、在子类中重写后,不管在哪里调用都是重写后的方法。重写之后,父类里的方法就不存在了(和隐藏方法相反)5、相应的 sealed关键字标示此方法不可以被重写
virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。
除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。
在静态属性上使用 virtual 修饰符是错误的。
隐藏方法:
1、当子类里有一个方法和父类里的相同时,就会把父类里的方法隐藏
2、只是把父类里的方法隐藏了,实际上这个方法还从在
3、如果使用子类声明的对象,调用隐藏方法会调用子类里的,反之,使用父类声明对象,就会调用父类里的隐藏方法
抽象类:
1、C#允许把类/函数声明为abstract,抽象类不能被实例化
2、抽象函数本身也是虚拟的virtual,只有定义没有函数体(不能实现)
3、当一个类中有抽象方法时,那类也必须是抽象的
4、我们继承一个抽象类时,必须去实现抽象方法(重写override)
5、抽象类不可以构造,但可以声明
虚方法和抽象方法的区别:
1.虚方法可以有实现体,抽象方法不能有实现体。
2.抽象方法要求派生类必须重载这个方法;
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Test1{ public class MyClass { public void Fun() { Console.WriteLine("这是父类里的方法!"); } public virtual void Fun1() { Console.WriteLine("这是父类里的虚方法!"); } } public class MyClass1 : MyClass { //隐藏方法 public void Fun() { Console.WriteLine("这是子类里的方法!"); } //重写后的方法 public override void Fun1() { Console.WriteLine("这是我重写后的方法"); } } public abstract class MyClass2 { public abstract void Fun(); public virtual void Fun1() { Console.WriteLine("我是抽象方法中的虚方法"); } } public class MyClass3 : MyClass2 { public override void Fun() { Console.WriteLine("在子类里必须实现"); } } class Program { static void Main(string[] args) { //对应不同的类有不同的结果 MyClass myClass = new MyClass(); myClass.Fun(); myClass.Fun1(); MyClass1 myClass1 = new MyClass1(); myClass1.Fun(); myClass1.Fun1(); MyClass3 myClass3 = new MyClass3(); myClass3.Fun(); myClass3.Fun1(); Console.ReadKey(); } }}
阅读全文
0 0
- 温故知新(2)虚方法、隐藏方法、抽象类
- 温故知新(3)密封类和密封方法sealed
- C# 抽象类 虚方法 抽象方法
- C#类的方法:重载,从写,虚函数,抽象函数,隐藏基类方法!
- 抽象类的方法(虚方法,抽象方法,普通方法)
- 抽象类、抽象方法
- 抽象类抽象方法
- 抽象类,抽象方法
- 抽象类,抽象方法
- 抽象方法,抽象类
- 抽象类、抽象方法
- 接口、抽象类、虚方法、抽象方法、普通方法理清
- C#的抽象类和方法,重载,覆盖,隐藏
- C#中的虚方法,抽象类,重写,隐藏,重载的区别与理解
- Java(抽象类与抽象方法)
- 温故知新--pdo之exec方法
- 接口、抽象类、抽象方法、虚方法 的区别
- C#中的抽象类、抽象方法和虚方法
- 部分库函数源码
- linq去重
- VS项目属性的一些配置项的总结(important)
- 使用阿里云搭建自己的服务器,并部署IIS为自己的app提供服务
- 用Js的eval解析JSON用法
- 温故知新(2)虚方法、隐藏方法、抽象类
- 【fastDFS】Nginx+FastDFS module安装
- 如何重复使用TIMER 避免计时累加
- 这里有你对 Web 游戏的疑问吗?
- 剑指offer面试题22 栈的压入、弹出序列
- lombok在idea上部署
- 图像识别算法
- Handler+Looper
- Android 调用系统邮箱