java和oc,Java和OC中Interface/Implement/Protocol

Java和Objective-C

iOS中有个概念「Protocol」,好多教科书或者Blog都说是Java中的接口,当时我看到的时候,只有C++的经验,心想尼玛接口是什么。。。。

后来学习Java的时候接触到一个概念「面向接口编程」,接口(Interface)这个单词怎么看着这么眼熟呢?原来OC的头文件里就是这个词啊。。

//Java的java文件

public interface BaseObject {}

//OC的Head文件

@interface BaseObject : NSObject

@end

虽然两个都称作「Interface」但是功能范围完全不一样,但是总体都遵循了一个思想『面向接口编程』

**定论:**功能上来讲 Java的Interface = OC的Interface + OC的Protocol

Interface不同的概念

多实现和单实现Java的Interface本身就是一个类,所以接口与接口之间可以进行继承,且一个接口可以有多个实现

Objective-C的的Interface也是一个类,但是一个接口只能有一个实现

所以才说两种语言都是一种「面向接口编程」的语言,你可以拿一个接口指向一个实现,并对其进行操作。

//Java

//定义了一个List接口且继承于另外一个Collection接口

public interface List extends Collection {}

//定义了一个类实现了List接口

public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable {}

//拿一个接口指向一个实例化

List list = new ArrayList<>();

//Objective-C

//定义了一个BaseObject接口(其实是个类)

@interface BaseObject : NSObject

@end

//实现了BaseObject接口

@implementation BaseObject

@end

//拿一个接口(类定义)指向一个实例化

BaseObject *baseObject = [[BaseObject alloc]init];

多实现和多遵守

由于Java和Object-C都是单继承的语言,所以说要实现多个多态时,就出现了类似的多实现和多遵守

//Class文件中在implements中添加多个Interface

public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable {}

//在.m文件中再次声明一次interface了BaseObject接口,然后通过<>遵守多个Protocol

@interface BaseObject : NSObject

@end

@implementation BaseObject

@end

谁可以当指针

根据多实现和单实现的来看,谁可以当指针呢

//Java

//本身当指针

ArrayList arrayList = new ArrayList<>();

//某个父类当指针

Object object = new ArrayList<>();

//某个接口当指针

List list = new ArrayList<>();

Serializable serializable = new ArrayList<>();

//Objective-C

//某个父类当指针

NSObject *object = [[BaseObject alloc]init];

//本身当指针

BaseObject *baseObject = [[BaseObject alloc]init];

//Protocol 不能当指针 但是可以使用模版类id加上遵守某个协议

//代表指向任意遵守协议UITextFieldDelegate类型的对象

id basePoint = [[BaseObject alloc]init];

有趣的是在OC里的id显示其Class是「T」,其相当于Java中的T模板感觉上

b9a7434b95034434cbc268070ca73fa7.png

总结

由上可知,虽然都是「面向接口编程」但是

Java的Interface本身就是类,而OC的Interface是类的定义

Java的Implements是多态的实现,而OC的Implementation是类的实现

Java的Implements等同于OC中对协议的遵守

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值