浅谈c++面向对象的封装,继承和多态
封装 c++的封装体现在class关键字上,一个类的定义将数据与操作数据的源代码进行有机的结合,形成一个“类”,封装一些具体实现,按需对外暴露部分属性和方法。 class BaseClass{ public: int a; void test1(); virtual void printFunc(){ cout<<"This is BaseClass."<
封装 c++的封装体现在class关键字上,一个类的定义将数据与操作数据的源代码进行有机的结合,形成一个“类”,封装一些具体实现,按需对外暴露部分属性和方法。 class BaseClass{ public: int a; void test1(); virtual void printFunc(){ cout<<"This is BaseClass."<
CGLIB动态代理 代理类将委托类作为自己的父类并为其中的非final委托方法创建两个方法,一个是与委托方法签名相同的方法,它在方法中会通过super调用委托方法;另一个是代理类独有的方法。在代理方法中,它会判断是否存在实现了MethodInterceptor接口的对象,若存在则将调用intercept方法对委托方法进行代理 可以在运行时对类或者是接口进行增强操作,且委托类无需实现接口 不能对final类以及final方法进行代理 底层将方法全部存入一个数组中,通过数组索引直接进行方法调...阅读全文
本文是何适 JVM 修仙系列第 3 篇,文末有本系列文章汇总。上一篇介绍 Java 虚拟机结构时讲到 Java 栈同 Java 方法的调用密切相关,那么这篇就来探究下 Java 栈到底和方法的调用有什么关系。Java 栈分如下几部分介绍:栈帧局部变量表操作数栈帧数据1. 栈帧 线程被创建的时候 Java 栈被创建,Java 栈中保存着栈帧。线程中方法被调用时,对应着一个栈帧被压入 Java 栈;方法返回时,对应的栈帧从 Java 栈中弹出;方法中抛出异常时,对应的栈帧也会将栈帧弹出。举例说明:方法 1 中调用方法 2,方法 2 中调用方法 3,方法 3 中调用方法 4,当执行到方法 4 时,栈内存结构如下图:举例模拟栈溢出:因为每次方法调用都会生成一个栈帧,当函数调用数量很大,生成的栈帧内存...阅读全文