• 值类型\引用类型\抽象方法\虚方法


    1、值类型和引用类型

    值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
      值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。
    2.抽象方法和虚方法
    抽象方法
    使用abstract关键字 public abstract bool Withdraw(…);
    抽象方法是必须被派生类覆写的方法。
    抽象方法是可以看成是没有实现体的虚方法
    如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法

    虚方法
    使用virtual关键字 public virtual bool Withdraw(…);
    调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。
    虚方法可以有实现体


    ---------------------------------------------------------------------------------------------

    虚拟方法和抽象方法有什么区别?

    抽象方法只有声明没有实现,需要在子类中实现;虚拟方法有声明和实现,并且可以在子类中覆盖,也可以不覆盖使用父类的默认实现

    虚拟方法有实现代码

    抽象方法则没有,

    并且抽象类不能被实例化,只能实例化实现了全部抽象方法的派生类

    抽象方法是虚拟方法的一种
    抽象方法没有实现,它的存在只是为派生类统一接口;派生类应该实现这个方法
    如果编写一个基类,它永远不会被实现,那么就应该将这个类中的一个或多个方法定义为
    抽象方法。

    抽象方法只有声明没有实现,需要在子类中实现;虚拟方法有声明和实现,并且可以在子类中覆盖,也可以不覆盖使用父类的默认实现

    补充一点

    只允许在抽象类中使用抽象方法声明

  • 相关阅读:
    BZOJ 1597: [Usaco2008 Mar]土地购买
    BZOJ 1005: [HNOI2008]明明的烦恼
    BZOJ 1004: [HNOI2008]Cards
    Burnside引理和Polya定理
    BZOJ 1003: [ZJOI2006]物流运输
    BZOJ 1002: [FJOI2007]轮状病毒
    BZOJ 1001: [BeiJing2006]狼抓兔子
    网络流 最大流dinic算法解释
    51nod 1299 监狱逃离
    2017.11.26【清华集训2017】模拟
  • 原文地址:https://www.cnblogs.com/yidianfeng/p/1439517.html
Copyright © 2020-2023  润新知