oc21--super

//
//  Phone.h

#import <Foundation/Foundation.h>
typedef enum
{
    kFlahlightStatusOpen,
    kFlahlightStatusClose
} FlahlightStatus;

// 被继承的这个类我们称之为父类/ 超类
@interface Phone : NSObject

+ (void)carameWithFlahlightStatus:(FlahlightStatus)status;
- (void)carameWithFlahlightStatus:(FlahlightStatus)status;
+ (void)openFlahlight;
+ (void)closeFlahlight;
@end
//
//  Phone.m

#import "Phone.h"

@implementation Phone

//可以有同名的类方法和对象方法
- (void)carameWithFlahlightStatus:(FlahlightStatus)status;
{
    NSLog(@"- carameWithFlahlightStatus");
}

+ (void)carameWithFlahlightStatus:(FlahlightStatus)status
{
    if (status == kFlahlightStatusOpen) {
        NSLog(@"%@",self);//Iphone,即使这个方法是子类通过super方法调过来的,self也是子类对象Iphone.
        [self openFlahlight];
    }else
    {
        NSLog(@"%@",self);
        [self closeFlahlight];
    }
    NSLog(@"拍照");
}

+ (void)openFlahlight
{
    NSLog(@"打开闪光灯");
}

+ (void)closeFlahlight
{
    NSLog(@"关闭闪光灯");
}

@end
//
//  Iphone.h

#import <Foundation/Foundation.h>
#import "Phone.h"

@interface Iphone : Phone

+ (void)carameWithFlahlightStatus:(FlahlightStatus)status;
- (void)test;
@end
//
//  Iphone.m

#import "Iphone.h"

@implementation Iphone

+ (void)carameWithFlahlightStatus:(FlahlightStatus)status
{
    // 由于以下代码和父类中的一模一样, 所以只需调用父类写好的代码即可
    /*if (status == kFlahlightStatusOpen) {
        NSLog(@"%@",self);
        [self openFlahlight];
    }else
    {
        NSLog(@"%@",self);
        [self closeFlahlight];
    }
    NSLog(@"拍照");*/

//    [self carameWithFlahlightStatus:status];
    // 只需要利用super给父类的方法发送一个消息, 那么系统就会自动调用父类的方法
    // 如果以后想在子类中调用父类的方法可以使用super
    // 如果想在给父类方法进行扩展的同时保留父类的方法, 那么可以使用super调用父类同名的方法
    [super carameWithFlahlightStatus:status];
}

- (void)test
{
    /*
     super跟self一样,super在类方法中就是代表了这个类,会调用父类的类方法。在对象方法中, 代表了这个对象,会调用父类的对象方法,
     可以利用super在任意方法中调用父类中的方法,super一般用在重写父类的方法并且想保留父类的功能。
     */
    [super carameWithFlahlightStatus:kFlahlightStatusOpen];
}
@end
//
//  main.m

#import <Foundation/Foundation.h>
#import "Iphone.h"

int main(int argc, const char * argv[]) {

    Iphone *p = [Iphone new];
    [p test];
    [Iphone carameWithFlahlightStatus:kFlahlightStatusOpen];

    return 0;
}
时间: 2024-08-04 15:07:47

oc21--super的相关文章

python中super出现的TypeError: must be type, not classobj 原因及解决

执行一下代码,出现错误,TypeError: must be type, not classobj class A():    def __init__(self):        print("Enter A")        print("Leave A") class B(A):    def __init__(self):        print("Enter B")        super(B, self).__init__()  

python中的super

super用于类的继承.用super()代替父类名 (一)通过类名调用父类中的方法                                                         (二)通过super调用父类中的方法(python3) 结果如下: python3中的写法:super().__init__() python2中的写法:super(B,self).__init__()  B子类,不是父类,别写错了.

public static &lt;T extends Comparable&lt;? super T&gt;&gt; void sort (List&lt;T&gt; list)的理解

public static <T extends Comparable<? super T>> void sort (List<T> list)的理解 public static <T extends Comparable<? super T>> void sort (List<T> list) (1)首先:public static void sort(List list) (2)为了安全性加泛型:public static <

Objective-C中的self和super

1.有过面向对象的人知道,self相当于this,super相当于调用父类的方法 2.self是类的隐藏的参数,指向当前调用方法的类,另一个隐藏参数是_cmd,代表当前类方法的selector. super并不是隐藏的参数,它只是一个”编译器指示符”,它和self指向的是相同的消息接受者,也就是说, [self class]=[super class]. 不同的是,super告诉编译器,当调用某个方法时,要去调用父类的方法,而不是本类的. 总之,当使用self调用方法时,会从当前类的方法列表中开

浅谈Java泛型中的extends和super关键字(转)

泛型是在Java 1.5中被加入了,这里不讨论泛型的细节问题,这个在Thinking in Java第四版中讲的非常清楚,这里要讲的是super和extends关键字,以及在使用这两个关键字的时候为什么会不同的限制.    首先,我们定义两个类,A和B,并且假设B继承自A.下面的代码中,定义了几个静态泛型方法,这几个例子随便写的,并不是特别完善,我们主要考量编译失败的问题: public class Generic{ //方法一 public static <T extends A> void

super关键字的用法

package com.frank;//定义包名,必须是第一行.如果没有包名,那么就会被放在一个没有名字的默认包中. import java.util.*; /** 继承 */ public class Sample {     public static void main(String[] args)     {         OldMan o = new OldMan("张三",80);         System.out.println("名字:"+o.

关于Java中this和super的用法介绍和区别

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可

HDU 1087 Super Jumping! Jumping! Jumping! 简单DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 题目大意:N个数字组成的一条路,每个数字是一个节点顺序连接,起点在第一个数之前,终点在第N个数之后.现让你选择一条路从起点跳到终点,只能往前且跳到比当前点大的那个点,可以认为终点是最大的,可以从起点直接跳到终点但是路的值就是0了,每条路的值为所经过的数字节点的值的和,问你值最大为多少. 解题思路:决策:在当前点i往i~N哪个点跳,反过来当前点i+1可以从1~i哪个点跳过来,那么a[i+1] >

Java重载、覆写、this、super、抽象类、接口

第一.重载和覆写 1) 重载:方法名相同,参数类型和个数不同,典型的是构造方法的重载  覆写:方法名.参数类型.返回值类型全部相同,典型的是接口的实现: 2)重载对权限没有要求:覆写要求  被覆写的方法不能拥有更严格的权限: 3)重载发生再一个类中:覆写发生在继承类中. 第二.this和super 1)this访问本类中的属性(方法),如果本类中没有此属性(方法),则从父类中 继续寻找:super询问父类中的属性(方法): 2)调用本类构造,必须放在构造方法的首行:调用父类构造,必须放在子类构造

this/super/static/final/匿名对象/继承/抽象类/访问权限修饰符

1.this关键字的作用     1)调用本类中的属性;     2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用     3)表示当前对象; 2.匿名对象     直接new出来的对象,不创建变量名,且只能使用一次,通常作为方法的参数及返回值使用 3.继承     继承是面向对象的三大特征之一,通过关键字:extends实现,被继承的类称为父类(也称作基类/超类),实现继承的类称为子类(也称作派生类).     特点:     (1)通过继承,子类可以直接访