用里氏代换原则来处理动画类的继承问题
2015-07-11 23:19
776 查看
1.里氏代换原则的基本原理:父类和子类在使用并没有什么区别,父类可以调用子类中的方法,而你看不出他们之间有什么区别。可以相互的替换,这才是核心的地方
2.设计中要确保父类可以直接调用子类的方法
3.将父类设计成虚类(设计的核心)
4.新建一个父类
@interface SourceView : UIView
- (void)show;
- (void)hide;
@end
#import "SourceView.h"
@implementation SourceView
- (void)show {
}
- (void)hide {
}
@end
4.1
再建 子类
#import "SourceView.h"
@interface ChildOneView : SourceView
@end
#import "ChildOneView.h"
@implementation ChildOneView
- (void)show {
NSLog(@"ChildOneView");
}
- (void)hide {
// todo
}
@end
#import "SourceView.h"
@interface ChildTwoView :SourceView
@end
#import "ChildTwoView.h"
@implementation ChildTwoView
- (void)show {
NSLog(@"ChildTwoView");
}
- (void)hide {
// todo
}
@end
4.2
调用
#import "ViewController.h"
#import "SourceView.h"
#import "ChildOneView.h"
#import "ChildTwoView.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
//要调用子类的方法只要改这个地方就可以了,方便
SourceView *tmpView = [[ChildTwoViewalloc] init];//或[[ChildTwoView alloc] init]
[tmpView show];
}
4.总结:可以用父类调用很多子类的方法
2.设计中要确保父类可以直接调用子类的方法
3.将父类设计成虚类(设计的核心)
4.新建一个父类
@interface SourceView : UIView
- (void)show;
- (void)hide;
@end
#import "SourceView.h"
@implementation SourceView
- (void)show {
}
- (void)hide {
}
@end
4.1
再建 子类
#import "SourceView.h"
@interface ChildOneView : SourceView
@end
#import "ChildOneView.h"
@implementation ChildOneView
- (void)show {
NSLog(@"ChildOneView");
}
- (void)hide {
// todo
}
@end
#import "SourceView.h"
@interface ChildTwoView :SourceView
@end
#import "ChildTwoView.h"
@implementation ChildTwoView
- (void)show {
NSLog(@"ChildTwoView");
}
- (void)hide {
// todo
}
@end
4.2
调用
#import "ViewController.h"
#import "SourceView.h"
#import "ChildOneView.h"
#import "ChildTwoView.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
//要调用子类的方法只要改这个地方就可以了,方便
SourceView *tmpView = [[ChildTwoViewalloc] init];//或[[ChildTwoView alloc] init]
[tmpView show];
}
4.总结:可以用父类调用很多子类的方法
相关文章推荐
- 从零学编程2-做个工资计算器
- No suitable driver found for jdbc:mysql://localhost/dbname
- 一个Servlet可以被映射成多个mapping
- 顶着台风,也要去参加的一次“磨课”
- [leetcode-]Climbing Stairs(C语言)
- 具有编译功能支持无限大数计算器的实现
- 不能再挺着了
- 一个ANDROID开发菜鸟的BUNDLE与MAP理解
- extended initializer lists only available with -std=c++11
- 【转】GitHub问题之恢复本地被删除的文件
- IE6+以上清除浮动普遍方法总结
- android中的样式主题和国际化
- hibernate关联对象的增删改查------查
- 单例设计模式
- hibernate关联对象的增删改查------查
- OSG中LOD的使用
- 基本数据结构之队列
- 逗号表达式
- errno是什么?
- [LeetCode] Path Sum II