Java Objective-C中的方法重写

Java Objective-C中的方法重写,java,objective-c,inheritance,Java,Objective C,Inheritance,我是一名java程序员,已经开始为iPhone开发应用程序。我遇到了一个问题。使用以下代码(java): 第1类(建筑物) 第2类(房屋) 可运行类 当在程序中调用房屋h(从超类建筑运行)中的更新方法时,调用房屋中的方法特殊操作,因此控制台打印“特殊操作完成”。我的问题是,xcode中的以下代码是否等效(在继承和方法重写方面,而不是控制台输出方面): 第1类(建筑物): .h文件: .m文件: -(void)Update { [self specialAction]; } 第2类(房屋

我是一名java程序员,已经开始为iPhone开发应用程序。我遇到了一个问题。使用以下代码(java):

第1类(建筑物)

第2类(房屋)

可运行类

当在
程序中调用
房屋h
(从超类建筑运行)中的
更新
方法时,调用
房屋
中的方法
特殊操作
,因此控制台打印“特殊操作完成”。我的问题是,xcode中的以下代码是否等效(在继承和方法重写方面,而不是控制台输出方面):

第1类(建筑物): .h文件:

.m文件:

-(void)Update
{
    [self specialAction];
}
第2类(房屋,从
建筑延伸或继承而来):
.m文件:

可运行类


房屋
是否继承自
建筑

@interface House : Building
如果是这样,您不必在这里使用不同的名称来实施您的特殊操作。 你可以申报

-(void)Update;
内务部

在家里给它下定义

-(void)Update
{
    NSLog("Special Action Done");
}
House
对象调用
Update
方法将调用House.m中的定义


另外,由于您是iOS新手,我想提一下约定:诸如“House”之类的类名以大写字母开头;方法名称和变量名称以小写字母开头。

房子是否继承自建筑

@interface House : Building
如果是这样,您不必在这里使用不同的名称来实施您的特殊操作。 你可以申报

-(void)Update;
内务部

在家里给它下定义

-(void)Update
{
    NSLog("Special Action Done");
}
House
对象调用
Update
方法将调用House.m中的定义


另外,由于您是iOS新手,我想提一下约定:诸如“House”之类的类名以大写字母开头;方法名和变量名以小写字母开头。

您的示例看起来是正确的。Java示例的完整程序近似于ObjC,如下所示:

/* Building.h */
@interface Building : NSObject
- (void)Update;
- (void)specialAction;
@end

/* Building.m */
@implementation Building

- (void)Update
{
    [self specialAction];
}

- (void)specialAction
{
    assert(0 && "override required"); // << see note
}

@end

/* House.h */
@interface House : Building
@end

/* House.m */
@implementation House

- (void)specialAction
{
    NSLog(@"Special Action Done");
}

@end

void ProgramMain()
{
    House * h = [House new];
    [h Update];
    [h release];
}
/*Building.h*/
@接口构建:NSObject
-(b)更新;
-(无效)特殊化;
@结束
/*建筑,m*/
@实施大楼
-(作废)更新
{
[自我特殊化];
}
-(无效)特殊化
{

assert(0&&“override required”);//您的示例看起来是正确的。您的Java示例的完整程序近似于ObjC,如下所示:

/* Building.h */
@interface Building : NSObject
- (void)Update;
- (void)specialAction;
@end

/* Building.m */
@implementation Building

- (void)Update
{
    [self specialAction];
}

- (void)specialAction
{
    assert(0 && "override required"); // << see note
}

@end

/* House.h */
@interface House : Building
@end

/* House.m */
@implementation House

- (void)specialAction
{
    NSLog(@"Special Action Done");
}

@end

void ProgramMain()
{
    House * h = [House new];
    [h Update];
    [h release];
}
/*Building.h*/
@接口构建:NSObject
-(b)更新;
-(无效)特殊化;
@结束
/*建筑,m*/
@实施大楼
-(作废)更新
{
[自我特殊化];
}
-(无效)特殊化
{

断言(0&“需要重写”);//抱歉没有解释,但是在java和Objective-C示例中,类
House
扩展了
Building
抱歉没有解释,但是在java和Objective-C示例中,类
House
扩展了
Building
当您尝试时发生了什么?当您尝试时发生了什么?“标准”在一个抽象类中创建方法的方法是发送一个<代码>不知道选择器< /C> >消息,即“代码> [SoodoNoTuneReistsEclit:Y.CMD]; @ SEBWO,我不考虑任何“标准”。它实际上只是一个说明。一个实现可以采取多种形式。在一个抽象类中创建方法的方法是发送一个<代码>不知道选择器< /C> >消息,即“代码> [SoodoNoTuneReistsEclit:Y.CMD]; @ SeBWO,我不考虑任何“标准”。它实际上只是一个说明。一个实现可以采取多种形式。
-(void)Update
{
    NSLog("Special Action Done");
}
/* Building.h */
@interface Building : NSObject
- (void)Update;
- (void)specialAction;
@end

/* Building.m */
@implementation Building

- (void)Update
{
    [self specialAction];
}

- (void)specialAction
{
    assert(0 && "override required"); // << see note
}

@end

/* House.h */
@interface House : Building
@end

/* House.m */
@implementation House

- (void)specialAction
{
    NSLog(@"Special Action Done");
}

@end

void ProgramMain()
{
    House * h = [House new];
    [h Update];
    [h release];
}