最近突然想起对oc的对象模型比较清楚,那么c++、java怎样实现的呢?
参考文献:
1. 先来易理解的,泛型的实现?
c++的泛型,采用编译期处理,添加对应的函数名+参数名,,运行期直接调用;
java 泛型,是伪泛型,采用编译期类型检查等,JVM实际加载class的时候,采用类型擦除(生成的class文件中为数据的原始类型)
oc无
2.单继承
c++继承(较复杂),这里先假定为简单的单继承,无覆盖,无多继承,无虚继承。
基本模型:虚函数表指针+非静态数据内存单元(连续)
无覆盖: 基类不受影响 直接扩充子类的虚函数表(先父类,后子类虚函数)
java 继承 待续。。。。
oc 继承,oc实际模型为一个结构体,包括class对象和meta Class(貌似有些跟java相似),每个对象均含有 superclass和isa指针,分别指向父类class地址和对象指针
3.多态
c++虚函数表,较复杂
覆盖单继承:基类:本身 子类:父类虚函数(被覆盖的方法用子类方法替换)+无覆盖的子类虚函数
覆盖多继承:子类:二维表 父类1虚函数(被覆盖的方法用子类方法替换)+无覆盖的子类虚函数,其余 只列举父类虚函数表
oc
struct _class_t {
struct _class_t *isa;
struct _class_t *superclass;
void *cache;
void *vtable;
struct _class_ro_t *ro;
};
vtable可见也是虚函数表
java待续
待续。。。。
如果你在以的话,别人就会知道你害怕被说,他们就会加倍地说你,