oc38--类工厂方法在继承中

//  Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property int age;
/*
 什么是类工厂方法:
 用于快速创建对象的类方法, 我们称之为类工厂方法
 类工厂方法中主要用于 给对象分配存储空间和初始化这块存储空间

 规范:
 1.一定是类方法 +
 2.方法名称以类的名称开头, 首字母小写
 3.一定有返回值, 返回值是id/instancetype
*/
+ (instancetype)person;

+ (instancetype)personWithAge:(int)age;
@end
//  Person.m

#import "Person.h"

@implementation Person

+ (instancetype)person
{
    // return [[Person alloc] init];
    // 注意: 以后但凡自定义类工厂方法, 在类工厂方法中创建对象一定不要使用类名来创建
    // 一定要使用self来创建
    // self在类方法中就代表类对象, 到底代表哪一个类对象呢?
    // 谁调用当前方法, self就代表谁, 子类调用,self就是子类的类对象。
    return [[self alloc] init];
}

+ (instancetype)personWithAge:(int)age
{
    //Person *p = [[Person alloc] init];    //这样写,即使子类调用 返回的就永远是Person,
    Person *p = [[self alloc] init];    //子类调用这里的self是子类对象,此时的p也是子类对象。
    p.age = age;
    return p;
}

@end
//  Student.h

#import "Person.h"

@interface Student : Person   //继承Person,就有了Person的age属性和person,personWithAge方法,以及自己的no属性,
@property int no;
@end
//  Student.m

#import "Student.h"

@implementation Student
@end
//  main.m
//  类工厂方法在继承中的注意点

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

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

    Student *stu = [Student person]; // 调用父类的person方法,父类用的是self,所以就是创建一个子类Student对象 [[Person alloc] init];
    stu.age = 55;
    NSLog(@"age = %i", stu.age);
    stu.no = 888;
    NSLog(@"no = %i", stu.no);

    Person *p = [Person person];
    p.age = 100;
    //p.no = 200;

    Student *stu1 = [Student personWithAge:30];
    Person *p1 = [Person personWithAge:30];
    stu1.no = 888;

    return 0;
}
时间: 2024-11-08 21:43:07

oc38--类工厂方法在继承中的相关文章

24-oc类工厂方法和类对象基本概念

类工厂方法 用于快速创建对象的类方法, 我们称之为类工厂方法 类工厂方法应用场景 类工厂方法中主要用于给对象分配存储空间和初始化这块存储空间 类工厂方法使用规范 规范: 一定是类方法 + 方法名称以类的名称开头, 首字母小写 一定有返回值, 返回值是id/instancetype 在类工厂方法实现中,调用本类的构造方法,创建实例对象,并返回实例对象 自定义类工厂方法是苹果的一个规范, 一般情况下, 我们会给一个类提供自定义构造方法和自定义类工厂方法用于创建一个对象 类工厂方法在继承中的注意点 以

自定义类工厂方法

1.自定义工厂方法 什么是工厂方法(快速创建方法) 类工厂方法是一种用于分配.初始化实例并返回一个它自己的实例的类方法.类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 例如new 自定义类工厂方法的规范 (1)一定是+号开头 (2)返回值一般是instancetype类型 (3)方法名称以类名开头,首字母小写 示例 + (id)person; + (id)person { return [[Person alloc]init]; } + (id)personWit

OC基础(八)类工厂方法

一:基本用法 类工厂方法作用:提高编码效率,快速创建对象的方法 规范:1.一定是+开头   2.方法以类名开头,首字母小写. 3.一定有返回值,返回类型为id/instancetype 比如:在类的声明和实现中 无参数: + (instancetype)person; + (instancetype)person{ return [[Person alloc] init]; } 在主函数创建对象中就可以直接使用,简化代码. Person *p1 = [Person person];  //此处的

类工厂方法及注意点

+(instancetype)person //p小写 { return [[self alloc] init]; } +(instancetype)personWithAge:(int)age { Person *p= [[self alloc] init]; p.age=age; return p; } 类工厂方法本质:创建一个实体类返回 注意点:创建实体类一定要用self而不是用实体类(此处是Person)

类工厂方法的定义

类工厂方法是一种用于分配.初始化实例并返回一个它自己的实例的类方法.类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 它们采用以下形式: + (type)className...(在这里 className 不包括任何前缀) 调用类工厂时如:nsstring *string = [nsstring initwithformat:@"jdhj%@",anotherString]

java匿名类工厂方法[java编程思想10.6.1]

package com.ebao.java.innerclass; public interface Service { void method1(); void method2();} public interface ServiceFactory { Service getService();} public class Implementation1 implements Service { private Implementation1(){} @Override public void

初学Java——类和方法(2)继承

1.继承可以使你定义一个通用的类(父类),之后扩充该类为一个更加特定的类(子类).  子类从父类中继承可访问的数据域和方法,还可以添加新的数据域和新方法.  语法:public class Subclass extends Superclass;2.父类中的私有数据域在该类之外是不可访问的,故不能在子类中直接使用,若父类中定义了公共的访问器/修改器,那么可以通过这种方式来访问它们.3.Java不允许多重继承,一个Java类只能直接继承自一个父类(单一继承 simple inheritance),

14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫"基类",子类也叫"派生类" 单继承:一个类只能从

Android中的设计模式-工厂方法模式

简单工厂&工厂方法 一直以来总是分不清简单工厂,工厂方法,抽象工厂这三个设计模式的区别,倒不是不理解其区别,而是总是记忆混淆,傻傻分不清楚,所以再重新总结一下区别,并记录下来,下次再混淆时,可以拿出来看看.这节先说简单工厂和工厂方法,下一节再说抽象工厂. 工厂方法中其实就包含了简单工厂,简单工厂也称为静态工厂方法, 简单工厂模式(Simple Factory) 类图 简单工厂模式又称为静态工厂方法模式,是工厂方法模式的一种,简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产