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

    相同点:

    虚方法(virtual)和抽象方法(abstract)都可以被派生类重写

    不同点:

    1.虚方法(virtual)有方法实体,抽象方法(abstract)没有方法实体【类似接口】

    virtual void SayWord()
    {
    //代码
    }
    abstract void SayWord();
     2.虚方法(virtual)在派生类中可以不重写,抽象方法(abstract)派生类中必须重写【类似接口】
    abstract class Person
    {
    abstract void SayName();
    }
    class Man:Person
    {
    override void SayName()
    {
    //方法实体
    }
    }
     3.抽象方法(abstract)必须声明在抽象类中


    下面给出实例代码:
    class Program
    {
    static void Main(string[] args)
    {
    Cat cat
    = new Cat("小花","2");
    cat.Eat();
    //调用父类中的虚方法,如果派生类中重写则调用重写后的
    cat.ShowName();
    Console.ReadKey();
           //最后输出结果是:
            猫吃东西
            我的名字是小花,今年2岁了 
    }
    }

    public abstract class Animal
    {
    protected string name;

    public string Name
    {
    get { return name; }
    set { name = value; }
    }
    protected string age;

    public string Age
    {
    get { return age; }
    set { age = value; }
    }

    /// <summary>
    /// 虚方法
    /// </summary>
    public virtual void ShowName()
    {
    Console.WriteLine(
    "我的名字是{0},今年{1}岁了", this.name,this.age);
    }
    /// <summary>
    /// 抽象方法
    /// </summary>
    public abstract void Eat();


    }

    public class Cat : Animal
    {
    /// <summary>
    /// 派生类必须重写父类中的抽象方法,否则会报错
    /// </summary>
    public override void Eat()
    {
    Console.WriteLine(
    "猫吃东西");
    }

    public Cat(string name, string age)
    {
    this.name = name;
    this.age = age;
    }
    }

  • 相关阅读:
    Java反射之访问私有属性或方法
    java字符串中显示双引号
    什么导致spring事务失效
    ActiveMq性能优化
    JFrame关闭事件处理
    c3p0数据库连接池死锁问题
    Mongodb性能优化
    Spring事务配置的五种方式
    ActiveMq启动停止
    JScrollPane动态加载图片
  • 原文地址:https://www.cnblogs.com/zhxhdean/p/2017380.html
Copyright © 2011-2022 走看看