gpt4 book ai didi

java - Objective-C 中的方法重写

转载 作者:行者123 更新时间:2023-12-01 17:34:23 24 4
gpt4 key购买 nike

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

1 级(建筑物)

public abstract class Building
{
public void Update()
{
specialAction();
}

public abstract void specialAction();
}

2级(众议院)

public abstract class House extends Building
{
public abstract void specialAction()
{
System.out.println("Special Action Done");
}
}

可运行类

public class Program
{
public void main(String[] args)
{
House h = new House();
h.Update();
}
}

Update方法来自House h (从父类(super class)大楼运行)在 Program 中调用方法specialAction来自House被调用,因此控制台打印“Special Action Done”。我的问题是,xcode 中的以下代码是否等效(就继承和方法重写而不是控制台输出而言):

1 级(建筑物):.h 文件:

-(void)Update;
-(void)SpecialAction;

.m 文件:

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

Class 2(House,扩展或继承自 Building ):.m 文件:

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

可运行类

House* h = [[House alloc] init];
[h Update];

最佳答案

你的例子看起来是正确的。 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];
}

语言中没有内置正式的抽象方法,但您可以使用协议(protocol)来近似它。

您可以将所有 ObjC 方法视为虚拟方法。

关于java - Objective-C 中的方法重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7936979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com