你这样写是不对的,因为在main函数中你只是创建了一个B类对象,B类对象的方法中并没有run和eat这两个方法,要想使用A类中的方法,必须先创建一个A类对象,并且把它赋值给B类的成员变量_c,但是你这里的_c是protected的,不能够直接访问,所以1.要么在B类的成员变量A *_c前面加上@public,2,要么为他提供get方法
如果是加@public的话,那么在主函数中就可以这样调用
- B *b = [B new];
- A *a = [A new];
- b->_c = a; // 让B类的_c指向新创建的A类对象,即实例化
- [b->_c run];
- [b->_c eat];
复制代码
用get方法的时候也是同理,另外,你的程序中没有写B类的@implementation,这样编译是不通过的。
这是我个人的一些理解~~ |