Java Objective-C中的方法重写
我是一名java程序员,已经开始为iPhone开发应用程序。我遇到了一个问题。使用以下代码(java): 第1类(建筑物) 第2类(房屋) 可运行类 当在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类(房屋
程序中调用房屋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];
}