转自:http://blog.sina.com.cn/s/blog_7afd7d7801016t3t.html

Object-C支持多继承吗?可以实现多个接口吗?Category是什么?重写一个类的方式是继承好还是分类好?为什么?

Object-C不支持多继承。我们可以通过ios中无处不在的@protocol委托方式来实现。协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现,由其它人来实现。

@protocol MyDelegate
-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money;

@end
@interface My : NSObject
{
id deleage;
}
@property(assign,nonatomic)id delegate;

@end

代码中声明了一个协议 名叫Mydelegate,在其中有一个buyIphone方法,即一个委托项。当我要购买手机的时候只需要通过delegate 调用 BuyIphone方法即可.

-(void)willbuy
{
[delegate buyIphone:@"iphone 4s" money:@"4888"];

}

我不必关心谁现实了这一委托,只要实现了这个委托的类,并且buyIphone是声明的委托中必须实现的方法,那么就一定能够得到结果.

#import
#import"My.h"
@interface Business : NSObject

@end

然后在 @implementation Business 中调用 buyIphone方法

#import"Business.h"

@implementation Business

-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money
{
NSLog(@"手机有货,这个价钱卖你了,发货中!!");
}

@end

Object-C是可以实现多接口的

Category (分类)可以拓展这个类.添加额外的方法.
Category(分类)使得在不修改该类原先代码的情况下.拓展或者修改现有类的定义.并且是向下有效的.既会影响到该类所有 子类.

重写一个类的方式用继承还是分类.取决于具体情况.假如目标类有许多的子类.我们需要拓展这个类又不希望影响到原有的代码.继承后比较好.
如果仅仅是拓展方法.分类更好.(不需要涉及到原先的代码)

继承和重载有什么区别呢?

继承可以扩展方法,也可以扩展实例变量,类目是不能扩展实例变量的,重载能删除已有的方法

例如:两个类。一个类classb 要 为自己编写一个方法,buyIphone ,但是这个classb已经继承这个classa的方法。那么怎么办呢?是不是可以写一个同名的方法代替原来的方法呢,答案是可以的。这个新的方法必须和继承的方法有相同的返回类型和参数类型和数目,方法的名字是一样的。

Object-C支持多继承吗?可以实现多个接口吗?Category是什么?的更多相关文章

  1. 牛客网Java刷题知识点之Java为什么不能支持多继承,但可以用接口来间接实现多继承

    不多说,直接上干货! java只支持单继承,这是由于安全性的考虑,如果子类继承的多个父类里面有相同的方法或者属性,子类将不知道具体要继承哪个,而接口可以多实现,是因为接口只定义方法,而没有具体的逻辑实 ...

  2. 《浅析:java不支持多继承的原因》

    很久以前,博主的一个好朋友给我考了我一个问题,为什么Java不支持多继承,如果多继承会有什么错误.这个问题困扰了我很久,我从单继承方面去推导过,又从多态的层面去思考过,但都无法解释为什么Java不支持 ...

  3. 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

    继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...

  4. Object与封装、继承和多态性

    Object与封装.继承和多态性 在面向对象编程思想中,无论是C++,Java还是C#等,封装.继承与多态性都有着无与伦比的地位,深入理解并掌握它们是必不可少的.而我将使用C#来浅谈继承与多态性. 1 ...

  5. 4.秋招复习简单整理之java支持多继承吗?

    java仅支持单继承,但支持接口多实现.

  6. java不支持多继承

    java不支持多继承,但支持多重继承,即一个类只能继承一个类,使用extends关键字 一个类可以实现多个接口,接口之间用逗号分隔,使用implements关键字 一个接口可以继承多个其他接口,接口之 ...

  7. 将map转为Object,支持 Date/Boolean

    import lombok.extern.log4j.Log4j2; import java.lang.reflect.Field; import java.lang.reflect.Method; ...

  8. java支持多继承吗

    java不支持多继承,只支持单继承(即一个类只能有一个父类).但是java接口支持多继承,即一个子接口可以有多个父接口.(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个 ...

  9. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

随机推荐

  1. JAVA Date超强工具类,可直接取代util.Date使用

    package net.maxt.util; import java.text.DateFormat; import java.text.ParseException; import java.tex ...

  2. 类似于GROUP BY SUM() 用于字符串连接的语句

    CREATE TABLE T ( [f1] VarCHAR(100), [f2] VarCHAR(100))goINSERT INTO T   VALUES ('a','abc')INSERT INT ...

  3. Thymeleaf th:action

    th:attr 任何属性值 <form action="subscribe.html" th:attr="action=@{/subscribe}"> ...

  4. 斯坦福大学卷积神经网络教程UFLDL Tutorial - Convolutional Neural Network

    Convolutional Neural Network Overview A Convolutional Neural Network (CNN) is comprised of one or mo ...

  5. CSS学习要点

    目标 掌握CSS基本语法,了解如何应用CSS到Html元素上并能熟练使用CSS进行元素布局. 要点 CSS基本概念.存在的意义 CSS 指层叠样式表 (Cascading Style Sheets), ...

  6. MANIFEST.MF文件Class-Path:节点需要引入的jar太多解决方案

    每行开头结尾都要有一个空格(半角的) 例子如下: Manifest-Version: 1.0 Class-Path: lib/mongo-java-driver-2.11.4.jar lib/guav ...

  7. IE8 通过Jquery动态修改html不显示的问题

    for (var i = 0; i < _priority_transf.length && i < xmlList.length; i++) { if (textCont ...

  8. 数学图形(1.39)TN constant curve

    这是个类似巴黎铁塔的曲线. #http://www.mathcurve.com/courbes2d/tn/tn.shtml vertices = t = to (PI*0.999) a = s = s ...

  9. [Todo] solr, lucence等学习

    先参考这个吧 http://www.shareditor.com/blogshow/6

  10. c++ 读写Excel及数据导入SQLServer

    c++ 读写Excel及数据导入SQLServer                 C++操作Excel ,网上的资料还是比较多的,写这篇文章也是分享给初学者一些经验. 本人 觉得CSpreadShe ...