A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 唐肖虎 于 2015-8-30 20:03 编辑

楼主只把父类和出错的子类的代码贴出来,希望大家帮我看看问题呀。这是父类

  1. #import <Foundation/Foundation.h>
  2. #pragma mark Animal的声明
  3. @interface Animal : NSObject
  4. {
  5.     int _age;
  6. }
  7. -(void)eat:(NSString *)foodName;
  8. -(void)run;
  9. @end
复制代码
这是子类
  1. #import <Foundation/Foundation.h>
  2. #import "Animal.h"
  3. //狗这个类要继承动物这个类
  4. /*
  5. 1、导入要继承的那个类的头文件
  6. 2、@interface Dog:父类名 (这里写Animal,不是NSObject)
  7. */
  8. @interface Dog : Animal
  9. -(void)lookHome;
  10. @end
复制代码
这是main里面的
  1. #import <Foundation/Foundation.h>
  2. #import "Animal.h"
  3. #import "Dog.h"
  4. int main(int argc, const char * argv[]) {
  5.     @autoreleasepool {
  6.         Animal *ani=[Animal new];
  7.         ani->_age=1;
  8.         [ani eat:@"玉米"];
  9.         [ani run];
  10.         
  11.         Dog *di=[Dog new];
  12.         [di eat:@"一坨新鲜的530"];
  13.         [di run];
  14.         [di lookHome];
  15.         di->_age=3;     
  16.     }
  17.     return 0;
  18. }
复制代码
楼主出错的地方在于两个di和ani—>age时发生错误,报错是因为protect。我想请问继承不是@public的吗?希望大家能详细的说一下啊,谢谢!




8 个回复

倒序浏览
不懂 帮顶!
回复 使用道具 举报
本帖最后由 alanwangke213 于 2015-8-29 17:54 编辑

默认的成员变量是受保护了protected类型的,你要这样用可以加一个@public或者写setter和getter
回复 使用道具 举报
请问你的代码怎么搞成那样的?
回复 使用道具 举报
alanwangke213 发表于 2015-8-29 17:51
默认的成员变量是受保护了protected类型的,你要这样用可以加一个@public或者写setter和getter ...

恩恩,知道了啊,谢谢啊。
回复 使用道具 举报
张中付 发表于 2015-8-29 17:57
请问你的代码怎么搞成那样的?

参与/回复主题里面有个<>就可以写代码了啊。
回复 使用道具 举报
#import <Foundation/Foundation.h>
#pragma mark Animal的声明
@interface Animal : NSObject
{
    @public
    int _age;
}
-(void)eat:(NSString *)foodName;
-(void)run;
@end
以上是改过的代码看看
解释:在属性的前面加上@public就ok了,因为现在的属性是@protect类型的私有变量,所以只能在父类和子类中访问,不能在主函数里访问。
回复 使用道具 举报
楼上说的对,实例变量默认保护的,你的那个实现代码只是没有贴出来吗
回复 使用道具 举报
Tangjw 中级黑马 2015-8-30 22:08:15
9#
学ios好呢还是学android好呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马