zoukankan      html  css  js  c++  java
  • 值类型\引用类型\抽象方法\虚方法

    1、值类型和引用类型

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

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


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

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

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

    虚拟方法有实现代码

    抽象方法则没有,

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

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

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

    补充一点

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

  • 相关阅读:
    字符串匹配常见算法(BF,RK,KMP,BM,Sunday)
    JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)
    JUnit【1】断言用法之assertEquals/True/False/ArrayEquals
    软件测试基础配置
    前端入门20-JavaScript进阶之异步回调的执行时机
    前端入门19-JavaScript进阶之闭包
    前端入门18-JavaScript进阶之作用域链
    前端入门17-JavaScript进阶之作用域
    前端入门16-JavaScript进阶之EC和VO
    前端入门15-JavaScript进阶之原型链
  • 原文地址:https://www.cnblogs.com/yidianfeng/p/1439517.html
Copyright © 2011-2022 走看看