objective-c(继承)

objective-c的继承给出基础例子及注意点:

  • 定义并实现基类ClassA
复制代码
#import <Foundation/Foundation.h>

@interface ClassA : NSObject{
    @public //@private  @protected
//objective-c有三种权限控制,同c++、java;
//1、private:只被该类自己的方法使用,子类也不可用;
//2、protected:默认权限,能够被子类使用;但其他类不可用;
//3、public:完全开放,不建议使用;
int _id; } @property int _id; -(void) setId:(int)id; -(void) printName: (NSString*) tag; @end
复制代码
复制代码
#import "ClassA.h"

@implementation ClassA

@synthesize _id;

-(void) setId:(int)id{
//此处注意self调用的陷阱
//self.id = input; 造成循环调用 //[self setId:input]; 造成循环调用,与上例等价 _id = id; } -(void)printName:(NSString *)tag{ NSLog(@"%@,%i", tag,_id); } @end
复制代码
  • 定义并实现子类B
复制代码
#import "ClassA.h"

@interface ClassB : ClassA{
    NSString *_name; //从编程规范性角度建议采用_XX方式
}

@property NSString *_name;

-(void) setId:(int)id andName:(NSString*)name;
-(void) printName:(NSString *)tag;

@end
复制代码
复制代码
#import "ClassB.h"

@implementation ClassB

@synthesize _name;

-(void) setId:(int)id andName:(NSString *)name{
    [super setId:id]; //使用super初始化基类
    self._name = name;
}

-(void) printName:(NSString *)tag{
    NSLog(@"%@,%i", [self._name stringByAppendingString:tag], self->_id); 
//若_id在ClassA中设置为private,则此处报错;
//->不同于.操作符,.操作符相当于是用了get方法,不存在权限控制; }
@end
复制代码
  • 测试
复制代码
#import <Foundation/Foundation.h>
#import "ClassA.h"
#import "ClassB.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        ClassA *tmp0 = [[ClassA alloc]init];
        [tmp0 setId:21];
        [tmp0 printName:@"tag"];
        
        ClassB *tmp1 = [[ClassB alloc] init];
        [tmp1 setId:3 andName:@"hi"];
        [tmp1 printName:@"_fredric"];
        
        NSLog(@"%i", tmp0->_id); //除非_id设置为public,否则报权限控制错误;
  
    }
    return 0;
}
复制代码
posted @   Fredric_2013  阅读(220)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示