Objective-C - 封装、继承、多态综合实例
来源:互联网 发布:js new object初始化 编辑:程序博客网 时间:2024/05/07 01:01
设计2个类,类之间的关系自拟(比如继承、组合)
/* 1.设计2个类,类之间的关系自拟(比如继承、组合) 1> 车 (1)属性 * 轮子数 * 速度 (2)方法 * 属性相应的set和get方法 2> 客车 (1)属性 * 轮子数 * 速度 * 座位数 (2)方法 * 属性相应的set和get方法*/// 客车 是一种 车,因此用继承关系#import <Foundation/Foundation.h>// 车@interface Car : NSObject{ int _wheels; // 轮子数 int _speed; // 速度}// 速度的getter和setter- (int)speed;- (void)setSpeed:(int)speed;// 轮子数的getter和setter- (int)wheels;- (void)setWheels:(int)wheels;@end@implementation Car// 速度的getter和setter- (int)speed{ return _speed;}- (void)setSpeed:(int)speed{ _speed = speed;}// 轮子数的getter和setter- (int)wheels{ return _wheels;}- (void)setWheels:(int)wheels{ _wheels = wheels;}@end// 客车@interface Bus : Car{ int _seats; // 座位数}// 座位数的getter和setter- (int)seats;- (void)setSeats:(int)seats;@end@implementation Bus// 座位数的getter和setter- (int)seats{ return _seats;}- (void)setSeats:(int)seats{ _seats = seats;}@end
/* 2.设计2个类,类之间的关系自拟(比如继承、组合) 1> 身材数据 (1)属性 * 身高 * 体重 * 手长 * 脚长 (2)方法 * 属性相应的set和get方法 2> 人 (1)属性 * 年龄 * 身高 * 体重 * 手长 * 脚长 (2)方法 * 属性相应的set和get方法*/// 人 拥有一份 身材数据 ,所以用组合关系// 身材数据@interface BodyData : NSObject{ int _height; // 身高 int _weight; //体重 int _handLength; // 手长 int _legLength; // 腿长}// 身高的getter和setter- (int)height;- (void)setHeight:(int)height;// 体重的getter和setter- (int)weight;- (void)setWeight:(int)weight;// 手长的getter和setter- (int)handLength;- (void)setHandLength:(int)handLength;// 腿长的getter和setter- (int)legLength;- (void)setLegLength:(int)legLength;@end@implementation BodyData// 身高的getter和setter- (int)height{ return _height;}- (void)setHeight:(int)height{ _height = height;}// 体重的getter和setter- (int)weight{ return _weight;}- (void)setWeight:(int)weight{ _weight = weight;}// 手长的getter和setter- (int)handLength{ return _handLength;}- (void)setHandLength:(int)handLength{ _handLength = handLength;}// 腿长的getter和setter- (int)legLength{ return _legLength;}- (void)setLegLength:(int)legLength{ _legLength = legLength;}@end// 人@interface Person : NSObject{ int _age; // 年龄 BodyData *_bodyData; // 身材数据}// _age的setter和getter- (void)setAge:(int)age;- (int)age;// _bodyData的setter和getter- (void)setBodyData:(BodyData *)bodyData;- (BodyData *)bodyData;@end//实现@implementation Person// _age的setter和getter- (void)setAge:(int)age{ _age = age;}- (int)age{ return _age;}// _bodyData的setter和getter- (void)setBodyData:(BodyData *)bodyData{ _bodyData = bodyData;}- (BodyData *)bodyData{ return _bodyData;}@endint main(){ Person *p = [Person new]; // 设置年龄 [p setAge:20]; // 设置身材数据 BodyData *b = [BodyData new]; [b setWeight:60]; [b setHeight:170]; [p setBodyData:b]; return 0;}
设计3个类,类之间的关系自拟(比如继承、组合)
/* 3.设计3个类,类之间的关系自拟(比如继承、组合) 1> 人 (1)属性 * 姓名 * 年龄 (2)方法 * 属性相应的set和get方法 * 设计一个对象方法同时设置姓名和年龄 2> 书 (1)属性 * 书名 * 出版社名称 * 作者(包含姓名和年龄) (2)方法 * 属性相应的set和get方法 3> 学生 * 姓名 * 年龄 * 学号 * 书(随身带着一本书) 2> 方法 * 属性相应的set和get方法 * 设计一个对象方法-study:输出书名*/// 书 拥有一个 作者 --> 组合// 学生 是一个 人 --> 继承// 学生 拥有一本 书 --> 组合#import <Foundation/Foundation.h>//人@interface Person : NSObject{ NSString *_name; // 姓名 int _age; // 年龄}// 姓名的getter和setter- (void)setName:(NSString *)name;- (NSString *)name;// 年龄的getter和setter- (void)setAge:(int)age;- (int)age;// 同时设置姓名和年龄- (void)setName:(NSString *)name andAge:(int)age;@end@implementation Person// 姓名的getter和setter- (void)setName:(NSString *)name{ _name = name;}- (NSString *)name{ return _name;}// 年龄的getter和setter- (void)setAge:(int)age{ _age = age;}- (int)age{ return _age;}// 同时设置姓名和年龄- (void)setName:(NSString *)name andAge:(int)age{ _name = name; _age = age; /* [self setName:name]; [self setAge:age]; */}@end// 书@interface Book : NSObject{ NSString *_name; // 书名 NSString *_publisher; // 出版社名称 Person *_author; // 作者}// 书名的getter和setter- (void)setName:(NSString *)name;- (NSString *)name;// 出版社名称的getter和setter- (void)setPublisher:(NSString *)publisher;- (NSString *)publisher;// 作者的getter和setter- (void)setAuthor:(Person *)author;- (Person *)author;@end@implementation Book// 书名的getter和setter- (void)setName:(NSString *)name{ _name = name;}- (NSString *)name{ return _name;}// 出版社名称的getter和setter- (void)setPublisher:(NSString *)publisher{ _publisher = publisher;}- (NSString *)publisher{ return _publisher;}// 作者的getter和setter- (void)setAuthor:(Person *)author{ _author = author;}- (Person *)author{ return _author;}@end// 学生@interface Student : Person{ int _no; //学号 Book *_book; //书}// 学号的getter和setter- (void)setNo:(int)no;- (int)no;// 书的getter和setter- (void)setBook:(Book *)book;- (Book *)book;// 学习- (void)study;@end@implementation Student// 学号的getter和setter- (void)setNo:(int)no{ _no = no;}- (int)no{ return _no;}// 书的getter和setter- (void)setBook:(Book *)book{ _book = book;}- (Book *)book{ return _book;}// 学习- (void)study{ NSLog(@"现在学习的书是:%@", [_book name]);}@end
设计Car类
/** 4.设计Car类 1> 属性 * 速度 2> 方法 * 属性相应的set和get方法 * 一个对象方法跟其他车子比较车速,返回速度差 * 一个类方法比较两辆车的车速,返回速度差 */#import <Foundation/Foundation.h>// 车@interface Car : NSObject{ int _speed; // 速度}// 速度的getter和setter- (void)setSpeed:(int)speed;- (int)speed;// 跟其他车子比较车速,返回速度差- (int)compareSpeedWithOther:(Car *)car;// 比较两辆车的车速,返回速度差+ (int)compareSpeedBetweenCar1:(Car *)car1 andCar2:(Car *)car2;@end@implementation Car// 速度的getter和setter- (void)setSpeed:(int)speed{ _speed = speed;}- (int)speed{ return _speed;}// 跟其他车子比较车速,返回速度差- (int)compareSpeedWithOther:(Car *)car{ // 第1种思路 // return _speed - [car speed]; // 第2种思路 return [Car compareSpeedBetweenCar1:self andCar2:car];}// 比较两辆车的车速,返回速度差+ (int)compareSpeedBetweenCar1:(Car *)car1 andCar2:(Car *)car2{ return [car1 speed] - [car2 speed];}@end
设计一个类Point2D,用来表示二维平面中某个点
/** 5.设计一个类Point2D,用来表示二维平面中某个点 1> 属性 * double x * double y 2> 方法 * 属性相应的set和get方法 * 设计一个对象方法同时设置x和y * 设计一个对象方法计算跟其他点的距离 * 设计一个类方法计算两个点之间的距离 3> 提示 * C语言的math.h中有个函数:double pow(double n, double m); 计算n的m次方 * C语言的math.h中有个函数:double sqrt(double n); 计算根号n的值(对n进行开根) */#import <Foundation/Foundation.h>#import <math.h>// 点@interface Point2D : NSObject{ double _x; // x值 double _y; // y值}// x值的getter和setter- (void)setX:(double)x;- (double)x;// y值的getter和setter- (void)setY:(double)y;- (double)y;// 同时设置x和y- (void)setX:(double)x andY:(double)y;// 计算跟其他点的距离- (double)distanceWithOther:(Point2D *)other;// 计算两个点之间的距离+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;@end@implementation Point2D// x值的getter和setter- (void)setX:(double)x{ _x = x;}- (double)x{ return _x;}// y值的getter和setter- (void)setY:(double)y{ _y = y;}- (double)y{ return _y;}// 同时设置x和y- (void)setX:(double)x andY:(double)y{ // 第1种思路 // _x = x; // _y = y; // 第2种思路 [self setX:x]; [self setY:y];}// 计算跟其他点的距离- (double)distanceWithOther:(Point2D *)other{ // 不要再傻乎乎算一遍了,直接调用类方法即可 return [Point2D distanceBetweenPoint1:self andPoint2:other];}// 计算两个点之间的距离+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2{ // 两点距离公式:( (x1-x2)的平方 + (y1-y2)的平方 )开根 // x1-x2 double xDelta = [p1 x] - [p2 x]; // (x1-x2)的平方 double xDeltaPingFang = pow(xDelta, 2); // y1-y2 double yDelta = [p1 y] - [p2 y]; // (y1-y2)的平方 double yDeltaPingFang = pow(yDelta, 2); return sqrt(xDeltaPingFang + yDeltaPingFang);}@endint main(){ Point2D *p1 = [Point2D new]; [p1 setX:10 andY:10]; Point2D *p2 = [Point2D new]; [p2 setX:13 andY:14]; double d1 = [p1 distanceWithOther:p2]; double d2 = [Point2D distanceBetweenPoint1:p1 andPoint2:p2]; NSLog(@"d1=%f, d2=%f", d1, d2); return 0;}
设计一个类Circle,用来表示二维平面中的圆
/** 6.设计一个类Circle,用来表示二维平面中的圆 1> 属性 * double radius (半径) * Point2D *point (圆心) 2> 方法 * 属性相应的set和get方法 * 设计一个对象方法判断跟其他圆是否相交(重叠返回YES,否则返回NO) * 设计一个类方法判断两个圆是否相交(重叠返回YES,否则返回NO) */#import <Foundation/Foundation.h>#import <math.h>// 点@interface Point2D : NSObject{ double _x; // x值 double _y; // y值}// x值的getter和setter- (void)setX:(double)x;- (double)x;// y值的getter和setter- (void)setY:(double)y;- (double)y;// 同时设置x和y- (void)setX:(double)x andY:(double)y;// 计算跟其他点的距离- (double)distanceWithOther:(Point2D *)other;// 计算两个点之间的距离+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;@end@implementation Point2D// x值的getter和setter- (void)setX:(double)x{ _x = x;}- (double)x{ return _x;}// y值的getter和setter- (void)setY:(double)y{ _y = y;}- (double)y{ return _y;}// 同时设置x和y- (void)setX:(double)x andY:(double)y{ // 第1种思路 // _x = x; // _y = y; // 第2种思路 [self setX:x]; [self setY:y];}// 计算跟其他点的距离- (double)distanceWithOther:(Point2D *)other{ // 不要再傻乎乎算一遍了,直接调用类方法即可 return [Point2D distanceBetweenPoint1:self andPoint2:other];}// 计算两个点之间的距离+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2{ // 两点距离公式:( (x1-x2)的平方 + (y1-y2)的平方 )开根 // x1-x2 double xDelta = [p1 x] - [p2 x]; // (x1-x2)的平方 double xDeltaPingFang = pow(xDelta, 2); // y1-y2 double yDelta = [p1 y] - [p2 y]; // (y1-y2)的平方 double yDeltaPingFang = pow(yDelta, 2); return sqrt(xDeltaPingFang + yDeltaPingFang);}@end// 圆@interface Circle : NSObject{ double _radius; // 半径 Point2D *_point; // 圆心}// 半径的getter和setter- (void)setRadius:(double)radius;- (double)radius;// 圆心的getter和setter- (void)setPoint:(Point2D *)point;- (Point2D *)point;// 跟其他圆是否重叠(重叠返回YES,否则返回NO)- (BOOL)isInteractWithOther:(Circle *)other;// 判断两个圆是否重叠(重叠返回YES,否则返回NO)+ (BOOL)isInteractBetweenCircle1:(Circle *)circle1 andCircle2:(Circle *)circle2;@end@implementation Circle// 半径的getter和setter- (void)setRadius:(double)radius{ _radius = radius;}- (double)radius{ return _radius;}// 圆心的getter和setter- (void)setPoint:(Point2D *)point{ _point = point;}- (Point2D *)point{ return _point;}// 跟其他圆是否重叠(重叠返回YES,否则返回NO)- (BOOL)isInteractWithOther:(Circle *)other{ return [Circle isInteractBetweenCircle1:self andCircle2:other];}// 判断两个圆是否重叠(重叠返回YES,否则返回NO)+ (BOOL)isInteractBetweenCircle1:(Circle *)circle1 andCircle2:(Circle *)circle2{ // 如果两个圆心的距离 >= 两个圆的半径和,就不重叠 // 如果两个圆心的距离 < 两个圆的半径和,就重叠 // 两个圆心 Point2D *point1 = [circle1 point]; Point2D *point2 = [circle2 point]; // 两个圆心的距离 double distance = [point1 distanceWithOther:point2]; // 半径和 double radiusSum = [circle1 radius] + [circle2 radius]; return distance < radiusSum;}@endint main(){ Circle *c1 = [Circle new]; // 设置半径 [c1 setRadius:2]; // 设置圆心 Point2D *p1 = [Point2D new]; [p1 setX:10 andY:10]; [c1 setPoint:p1]; Circle *c2 = [Circle new]; // 设置半径 [c2 setRadius:2]; // 设置圆心 Point2D *p2 = [Point2D new]; [p2 setX:13 andY:14]; [c2 setPoint:p2]; // 圆心距离是5 半径和是4 所以不重叠 BOOL b1 = [c1 isInteractWithOther:c2]; BOOL b2 = [Circle isInteractBetweenCircle1:c1 andCircle2:c2]; NSLog(@"%d %d", b1, b2); return 0;}
1 0
- Objective-C - 封装、继承、多态综合实例
- Objective-c:封装、继承与多态
- 3.封装继承与多态之objective-c
- 3.封装继承与多态之objective-c
- [Objective-C] 封装、继承和多态
- 黑马程序员_ Objective C 封装,继承,多态总结
- objective C程序 封装、继承及多态
- 黑马程序员——Objective-C的封装、继承与多态
- 【黑马程序员】iOS学习之路——Objective-C之封装、继承和多态
- objective-c自学总结(三)---面向对象的封装,继承与多态
- 黑马程序员——Objective-C语言知识整理——封装、继承与多态
- OC基础-零基础学习Objective-C:第二部分.封装、继承和多态
- 接口、抽象类、封装、继承、多态的综合案例
- Objective-C 4封装、继承、多态
- Objective-C语法之继承、封装、多态
- Objective-C中的封装、继承、多态、分类
- objective C多继承
- 实例讲解 继承封装多态(一)
- C# 根据进程名关闭进程方法
- 我是一只小小IT鸟的读书笔记
- System.Security.Policy.PolicyException: 无法获取所需的权限。
- MUD游戏编程 完成DNS查找
- [面试时]我是如何讲清楚Block的
- Objective-C - 封装、继承、多态综合实例
- 《C++Primer》读书笔记(6)
- 利用css和javascript制作的幻灯片效果
- CALayer 以及时间模型
- Apache启动不了httpd: apr_sockaddr_info_get() failed
- JAVA_SE基础——编码规范&代码编写规则
- eclipse 编码设置之BOM丢失
- 中国全谱系动车组图解
- hdu-5184(卡特兰数 逆元)