zoukankan      html  css  js  c++  java
  • 虚方法(virtual)和抽象方法(abstract)的区别

    一,直接上代码,后总结:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Demo
    {
        class Program
        {
            static void Main(string[] args)
            {
                Testvirtual Tv = new Testvirtual();
                Tv.Say();
                Tv.CommonMethod();
                Instanvirtual Iv = new Instanvirtual();
                Iv.Say();
    
                //Testabstract Ta = new Testabstract();  //提示错误:无法创建抽象类或接口的实例
                Testabstract Ta = new Instanabstract();
                Ta.Say();
                Ta.SayVir();  //而抽象类中存在虚方法则不必需在派生类(子类)中重写,因为虚方法本身有声明主体,所以一样可以输出
                Console.ReadKey();
    
            }
        }
        public class Testvirtual
        {
            public virtual void Say()
            {
                Console.WriteLine("虚方法");
            }
    
            public void CommonMethod()
            {
                Console.WriteLine("一般方法");
            }
        }
        public class Instanvirtual : Testvirtual
        {
            public override void Say()
            {
                Console.WriteLine("重写虚方法");
            }
    
            //这个如果父类一般方法没有使用virtual,abstract关键字,则会提示没有找到适合的方法来重写
            //public override void CommonMethod()
            //{
            // Console.WriteLine("重写一般方法");
            //}
        }
        public abstract class Testabstract  //定义抽象方法,必须在抽象类中
        {
           // public abstract void Test() {     //如果这样会会提示:无法声明主体,因为它标记为abstract,并且提示不实现继承的抽象成员
             //   Console.WriteLine("抽象方法");
            //}
    
            public virtual void SayVir() {
                Console.WriteLine("抽象类的虚方法");
            }
    
            public abstract void Say();
    
            public void CommonMethod() { }
        }
    
        public class Instanabstract : Testabstract
        {
            public override void Say()
            {
                Console.WriteLine("重写抽象方法");
            }
    
            //这个如果父类一般方法没有使用virtual,abstract关键字,则会提示没有找到适合的方法来重写
            //public override void CommonMethod() {
            //Console.WriteLine("重写一般方法");
            //}
        }
    }

    综上总结出:如果一般方法没有使用virtual,abstract关键字,则会提示没有找到适合的方法来重写,

    一,抽象方法:

    1,抽象方法必须在抽象类中定义

    2,抽象方法必须在派生类(子类)中实现

    3,抽象类中的抽象方法无法声明主体,因为它标记为abstract

    4,无法创建抽象类或接口的实例

    二,虚方法

    1,虚方法不必须在派生类(子类)中重写实现

    2,虚方法声明方法实体

    3,可以创建虚方法类的实例

     4,如果抽象类中有虚方法,不必须在派生类(子类)中重写,如上代码调用实现

  • 相关阅读:
    extjs 小总结
    button 带有自动提交功能。
    跑马灯效果 extjs
    ExtJs之Ext.data.Store
    dojochina ext .rar
    后台得到extjs中gridpanel选中行的某个值
    关于JavaScript“跨域”问题的总结
    Eclipse+php插件+Xdebug搭建PHP完美开发/调试环境指南
    [修补 Patch] 重命名上传文件的解决办法
    容器Collection_2
  • 原文地址:https://www.cnblogs.com/May-day/p/6489523.html
Copyright © 2011-2022 走看看