美文网首页
父类有一个静态变量子类中改变

父类有一个静态变量子类中改变

作者: LX2014 | 来源:发表于2018-05-10 14:15 被阅读5次

父类中有个静态变量,子类会自动继承:
注意:通过对象对象方法和通过类方法修改static静态变量的结果是不一样的。
通过类(+方法)方法对static变量进行修改:父类和子类都会对彼此的静态变量进行修改。
通过对象(-方法)方法对static变量进行修改:只能修改本类中对象方法中获取的静态变量。
在对象(-方法)方法中修改了静态变量的值,通过类方法获取静态变量的值,得到的始终是父类中静态变量的值。

//父类Person
static NSString *_st = @"11";

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) NSHashTable *family;

- (void)test;

+ (void)setSt:(NSString *)st;
+ (NSString *)st;

@end

- (void)test {
    NSLog(@"Person1:%@",_st);
    _st = @"Person";
    NSLog(@"Person2:%@",_st);
}


+ (void)setSt:(NSString *)st {
    _st = [st copy];
}

+ (NSString *)st {
    return _st;
}

//子类
@interface Son : Person

@end

@implementation Son

- (void)test {
    NSLog(@"Son1:%@",_st);
    _st = @"Son";
    NSLog(@"Son2:%@",_st);
}

@end

int main()
{
        Person *peron = [[Person alloc] init];
        Son *son = [[Son alloc] init];
        [peron test];
        [son test];
        [Person setSt:@"person class"];
        NSLog(@"person class===");
        [peron test];
        [son test];
        
        NSLog(@"Person class ===");
        [Son setSt:@"Son class"];
        [peron test];
        [son test];
        NSLog(@"get class ====");
        NSLog(@"Person class:%@",[Person st]);
        NSLog(@"Son class:%@",[Son st]);
}

//打印结果
2018-05-10 14:08:36.228924+0800 TestOC[2183:485436] Person1:11
2018-05-10 14:08:36.228946+0800 TestOC[2183:485436] Person2:Person
2018-05-10 14:08:36.228956+0800 TestOC[2183:485436] Son1:11
2018-05-10 14:08:36.228964+0800 TestOC[2183:485436] Son2:Son
2018-05-10 14:08:36.228977+0800 TestOC[2183:485436] person class==========
2018-05-10 14:08:36.228985+0800 TestOC[2183:485436] Person1:person class
2018-05-10 14:08:36.228992+0800 TestOC[2183:485436] Person2:Person
2018-05-10 14:08:36.229000+0800 TestOC[2183:485436] Son1:Son
2018-05-10 14:08:36.229007+0800 TestOC[2183:485436] Son2:Son
2018-05-10 14:08:36.229014+0800 TestOC[2183:485436] Person class ======
2018-05-10 14:08:36.229022+0800 TestOC[2183:485436] Person1:Son class
2018-05-10 14:08:36.229029+0800 TestOC[2183:485436] Person2:Person
2018-05-10 14:08:36.229037+0800 TestOC[2183:485436] Son1:Son
2018-05-10 14:08:36.229044+0800 TestOC[2183:485436] Son2:Son
2018-05-10 14:08:36.229052+0800 TestOC[2183:485436] get class ====
2018-05-10 14:08:36.229061+0800 TestOC[2183:485436] Person class:Person
2018-05-10 14:08:36.229206+0800 TestOC[2183:485436] Son class:Person


相关文章

  • java static 关键字的理解

    1.类的加载顺序:父类的静态变量--》父类的静态方法--》子类的静态变量--》子类的静态方法---》父类的成员变量...

  • java初始化过程

    初始化顺序:父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父类的非静态变量(...

  • java相关零碎知识

    java初始化,加载顺序: 父类的静态成员变量,父类静态代码块,子类的静态成员变量,子类的静态代码块,父类非静态成...

  • 初始化执行顺序

    Java初始化的顺序如下: 父类的静态变量 父类的静态代码块 子类的静态变量 子类的静态代码块 父类的非静态变量...

  • Java和Kotlin类的初始化顺序

    Java Java程序初始化的顺序:父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 ...

  • 类加载-初始化阶段

    加载顺序总结 父类的静态字段——>父类静态代码块——>子类静态字段——>子类静态代码块——>父类成员变量(非静态字...

  • Java父子类加载顺序

    加载顺序 先上桌结论: 父类静态属性(成员变量) > 父类静态代码块 > 子类静态属性 > 子类静态代码块 > 父...

  • Java知识点总结

    Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...

  • 继承的实例变量不能被覆盖

    1.父类的变量(实例变量和静态变量)能被子类的同名变量隐藏 2.父类的静态方法被子类的同名静态方法隐藏 3.父类的...

  • 静态内部类实现懒加载单例模式

    代码 为什么 Java程序的初始化顺序依次是:父类静态变量-->父类静态代码块-->子类静态变量-->子类静态代码...

网友评论

      本文标题:父类有一个静态变量子类中改变

      本文链接:https://www.haomeiwen.com/subject/wkoblftx.html