OC中的多态

代码1:

#import <Foundation/Foundation.h>

@interface Animal : NSObject
- (void)eat;
@end

@implementation Animal
- (void)eat
{
    NSLog(@"Animal-eat");
}
@end

@interface Dog : Animal
@end

@implementation Dog
- (void)eat
{
    NSLog(@"Dog-eat");
}
@end

int main()
{
    Animal* a = [Dog new];
    [a eat];
    
    return 0;
}

输出1:

Dog-eat

代码2:

#import <Foundation/Foundation.h>

// Animal
@interface Animal : NSObject
- (void)eat;
@end

@implementation Animal
- (void)eat
{
    NSLog(@"Animal-eat");
}
@end

// Dog
@interface Dog : Animal
@end

@implementation Dog
- (void)eat
{
    NSLog(@"Dog-eat");
}
@end

// Cat
@interface Cat : Animal
@end

@implementation Cat
- (void)eat
{
    NSLog(@"Cat-eat");
}
@end

void feed(Animal* a)
{
    [a eat];
}

int main()
{
    Animal* a = [Animal new];
    feed(a);
    
    Dog* d = [Dog new];
    feed(d);
    
    Cat* c = [Cat new];
    feed(c);
    
    Animal* aa = [Dog new];
    feed(aa);
    
    return 0;
}

输出2:

Animal-eat
Dog-eat
Cat-eat
Dog-eat
时间: 2024-08-25 10:31:34

OC中的多态的相关文章

论oc中多多态的理解与应用

多态定义为某一类事物的多种形式的表现. 多态中父类指针指向子类对象. 多态中系统会自动监测,调用最真实的对象方法. 多态中必须要用到继承,没有继承就没有多态. 通俗的讲,多态就是吃饭时你可以用勺子,可以用叉子,也可以用筷子,但是你只有在吃饭时,才会用到这些不同的工具. 因此多态中父类可以调用子类的方法. 但是吃饭时,筷子勺子或者叉子的颜色不一样,所以你不能说吃饭颜色不一样. 因此父类指针对象不能引用子类对象特有的属性和方法. 就是这样.

黑马程序员------OC面向对象之多态

-----iOS培训.Android培训.Java培训,期待与您交流----- 一.多态的基本概念 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述--多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4 编程技术内幕").简单的说,就是一句话:允许将

OC继承和多态

一 :继承 1)类和类之间的关系 2)父类:  Animal 3) 子类: Dog  Cat 4) 子类继承了父类的属性和方法 子类重写父类的方法的时候不用声明父类的方法,因为父类中已经声明了该方法,子类声明中导入了父类的声明. 继承的好处:1>抽取出了重复的代码.2>建立了类和类之间的联系 继承的缺点:耦合性太强,也就是指类和类之间的关联性太强 注意:组合模型和继承之间的区别,及组合模型的优点. OC语言是单继承语言.在oc语言中,基本上所有类的根类都是NSObject类. 三:继承注意点

iOS开发几年了,你清楚OC中的这些东西么1

前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS的开发了, 之后就是对swift持续不断的学习, 近来swift3.0的发布, 更多的人会选择swift来进行iOS的开发看上去更是成为了一种趋势, 不过一个合格的iOS开发者对oc以及c语言的掌握是必不可少的技能, 本篇中主要是写一些大家平时都可能用到但是不一定知道的oc的东西 1.oc中的对象的

java中的继承与oc中的继承的区别

为什么要使用继承? 继承的好处: (1)抽取出了重复的代码,使代码更加灵活 (2)建立了类和类之间的联系 继承的缺点: 耦合性太强 在OC中的继承是: 1.OC中不允许子类和父类拥有相同名称的成员变量名:(java中是可以的) 2.编译器从上往下执行,所以在子类前面至少应该要有父类的声明:如 @interface Worker : Person @end 3.OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果父类没有定义该方法,则继续在继承链上查找,直到找到为止,

OC中的代理模式

OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的.这里举一个简单的例子:小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play这里代理对象就是:护士类.保姆类,小孩类是被代理对象.看一下代码:首先看一下小孩类:Children.h[objc]  view plaincopy 1. //   2. //  Children.h   3. //  12_DesignStyle   4. //   5. //

OC中SEL,类别,继承,协议的使用

1.SEL SEL是selector的缩写,selector在OC中作用是定义一个方法变量,通过该方法变量来调用方法.我们在后面的UI中会经常用selector来调用事件方法.下面我将举两个例子来说明SEL的使用. 直接通过方法名来调用,我们先新建一个Student类,并在其中定义一个名叫Test的对象方法.并定义一个输出语句: -(void)test { NSLog(@"这是SEL的测试方法"); } 我们在Main方法中通过SEL调用就会输出以上结果,如下: SEL s = @se

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFrom

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS