Objective-C:继承的体现
典型的继承例子:形状Shape为基类,继承它的类有:点类Point、圆类Circle、球体类Sphere、矩形类Rectangle、正方形类Square
点类Point也为基类,继承它的类有:圆类Circle、球体类Sphere、矩形类Rectangle、正方形类Square
圆类Circle也为基类,继承它的类有:球体类Sphere
矩形类Rectangle为基类,继承它的类是:正方形类Square
//Shape类 .h和.m文件
// Shape.h
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 形状类 #import <Foundation/Foundation.h> @interface Shape : NSObject
@property(nonatomic,assign)CGFloat length;
@property(nonatomic,assign)CGFloat area;
@property(nonatomic,assign)CGFloat volum;
-(void)draw;
-(void) Area;
-(void) Length;
-(void) Volum;
@end
// Shape.m
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 形状类 #import "Shape.h" @implementation Shape
-(void)draw
{
NSLog(@"drawing a Shape!");
}
-(void) Area{}
-(void) Length{}
-(void) Volum{}
@end
//Point类 .h和.m文件
// Point.h
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 点类 #import "Shape.h" @interface MyPoint : Shape
@property(nonatomic,assign) CGFloat x;
@property(nonatomic,assign) CGFloat y;
-(id)initWithX:(CGFloat)m andY:(CGFloat)n;
-(void)show;
@end
// Point.m
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 点类 #import "MyPoint.h" @implementation MyPoint
-(id)initWithX:(CGFloat)m andY:(CGFloat)n
{
self = [super init];
if(self)
{
_x = m;
_y = n;
}
return self;
}
-(void)draw
{
NSLog(@"drawing a point!");
}
-(void)show
{
NSLog(@"x:%.1f,y:%.1f",_x,_y);
}
@end
//圆类Circle .h和.m文件
// Circle.h
// 继承
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// 圆类 #import "MyPoint.h" @interface Circle : MyPoint
@property(nonatomic,assign)CGFloat radius;
-(id)initWithX:(CGFloat)m andY:(CGFloat)n andRadius:(CGFloat)r;
@end
// Circle.m
// 继承
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// 圆类 #import "Circle.h"
#define PI 3.14
@implementation Circle
-(id)initWithX:(CGFloat)m andY:(CGFloat)n andRadius:(CGFloat)r
{
self = [super init];
if(self)
{
super.x = m;
super.y = n;
_radius = r;
}
return self;
}
-(void) Area
{
super.area = PI*_radius*_radius;
}
-(void) Length
{
super.length = *PI*_radius;
}
-(void)draw
{
NSLog(@"drawing a circle!");
}
-(void)show
{
[super show];
NSLog(@"radius:%.1f,area:%.1f,Length:%.1f",_radius,super.area,super.length);
}
@end
//球体类Sphere .h和.m文件
// Sphere.h
// 继承
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// 球体类 #import "Circle.h" @interface Sphere : Circle
@property(nonatomic,assign)CGFloat z;
-(id)initWithX:(CGFloat)m andY:(CGFloat)n andZ:(CGFloat)t andRadius:(CGFloat)r;
@end
// Sphere.m
// 继承
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// 球体类 #import "Sphere.h"
#define PI 3.14
@implementation Sphere
@synthesize z;
-(id)initWithX:(CGFloat)m andY:(CGFloat)n andZ:(CGFloat)t andRadius:(CGFloat)r
{
if(self = [super init])
{
super.x = m;
super.y = n;
z = t;
super.radius = r;
}
return self;
}
-(void)draw
{
NSLog(@"draw a sphere!");
}
-(void) Area
{
super.area = *PI*super.radius*super.radius;
}
-(void) Volum
{
super.volum = /*PI*super.radius*super.radius*super.radius;
}
-(void)show
{
NSLog(@"x:%.1f,y:%.1f,z:%.1f",super.x,super.y,z);
NSLog(@"radius:%.1f,area:%.1f,volum:%.1f",super.radius,super.area,super.volum);
}
@end
//矩形类Rectangle .h和.m文件
// Rectangle.h
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 矩形类 #import "MyPoint.h" @interface Rectangle : MyPoint @property(nonatomic,assign) CGFloat len;
@property(nonatomic,assign) CGFloat hei;
-(id)initWith:(CGFloat)m andY:(CGFloat)n andLen:(CGFloat) l andHei:(CGFloat)h;
@end
// Rectangle.m
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 矩形类 #import "Rectangle.h" @implementation Rectangle
-(id)initWith:(CGFloat)m andY:(CGFloat)n andLen:(CGFloat) l andHei:(CGFloat)h
{
self = [super init];
if(self)
{
self.x = m;
self.y = n;
_len = l;
_hei = h;
}
return self;
}
-(void) Area
{
super.area = _len*_hei;
}
-(void) Length
{
super.length = *(_len+_hei);
}
-(void)draw
{
NSLog(@"drawing a Rectangle!");
}
-(void)show
{
[super show];
NSLog(@"len:%.1f,hei:%.1f,area:%.1f,length:%.1f",_len,_hei,super.area,super.length);
}
@end
//正方形类Square .h和.m文件
// Square.h
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 正方形类 #import "Rectangle.h" @interface Square : Rectangle
@end
// Square.m
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// 正方形类 #import "Square.h" @implementation Square
-(void) Area
{
self.area = super.len*super.hei;
}
-(void) Length
{
self.length = *self.len;
}
-(void)draw
{
NSLog(@"drawing a Square!");
}
-(void)show
{
[super show];
}
@end
//主函数测试
// main.m
// 继承
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Shape.h"
#import "Square.h"
#import "MyPoint.h"
#import "Rectangle.h"
#import "Circle.h"
#import "Sphere.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
Shape *shape = [[Shape alloc]init];
[shape draw];
printf("\n"); MyPoint *mypoint = [[MyPoint alloc]initWithX:0.0 andY:0.0];
[mypoint draw];
[mypoint show];
printf("\n"); Circle *circle = [[Circle alloc]initWithX:1.1 andY:1.1
andRadius:5.0];
[circle Area];
[circle Length];
[circle draw];
[circle show];
printf("\n"); Rectangle *rectangle = [[Rectangle alloc]initWith:2.2 andY:2.2 andLen: andHei:];
[rectangle Area];
[rectangle Length];
[rectangle draw];
[rectangle show];
printf("\n"); Square *square = [[Square alloc]initWith:3.3 andY:3.3 andLen: andHei:];
[square Area];
[square Length];
[square draw];
[square show];
printf("\n"); Sphere *sphere = [[Sphere alloc]initWithX:4.4 andY:4.4 andZ:4.4 andRadius:6.0];
[sphere Area];
[sphere Volum];
[sphere draw];
[sphere show];
printf("\n");
}
return ;
}
//运行结果
-- ::15.931 继承[:] drawing a Shape! -- ::15.933 继承[:] drawing a point!
-- ::15.933 继承[:] x:0.0,y:0.0 -- ::15.933 继承[:] drawing a circle!
-- ::15.933 继承[:] x:1.1,y:1.1
-- ::15.933 继承[:] radius:5.0,area:78.5,Length:31.4 -- ::15.934 继承[:] drawing a Rectangle!
-- ::15.934 继承[:] x:2.2,y:2.2
-- ::15.934 继承[:] len:3.0,hei:8.0,area:24.0,length:22.0 -- ::15.934 继承[:] drawing a Square!
-- ::15.934 继承[:] x:3.3,y:3.3
-- ::15.934 继承[:] len:4.0,hei:4.0,area:16.0,length:16.0 -- ::15.935 继承[:] draw a sphere!
-- ::15.935 继承[:] x:4.4,y:4.4,z:4.4
-- ::15.935 继承[:] radius:6.0,area:452.2,volum:678.2 Program ended with exit code:
注释:继承Shape的形状基本都具有自己的坐标及其对应的属性(如半径、长、高、宽、面积、周长、体积等)。当然,视情况去定义。
Objective-C:继承的体现的更多相关文章
- java7-3 继承
1.继承概述: 把多个类中相同的内容给提取出来定义到一个类中. 如何实现继承呢? Java提供了关键字:extends 格式: class 子类名 extends 父类名 {} 父类也称为基类.超类: ...
- c#基础学习汇总----------继承
封装,继承,多态.这是面向对象的思想,也可以说是最基本的东西.说到继承,直接的说他就是面向对象中类与类之间的一种关系.通过继承,使得子类具有父类公有的受保护访问权限的属性和方法,同时子类可以通过加入新 ...
- Android(java)学习笔记118:类继承的注意事项
/* 继承的注意事项: A:子类只能继承父类所有非私有的成员(成员方法和成员变量) B:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法. C:不要为了部分功能而去 ...
- .NET面向对象特性之“继承”
整体简介 1.理解继承——继承关系图 2.实现继承与接口多继承 3.new. virtual.override方法 4.抽象方法和抽象类的继承 5.继承的本质 6.继承的复用性.扩展性和安全性 7.多 ...
- 《java入门第一季》之面向对象(继承)
/* 继承的注意事项: A:子类只能继承父类所有(非私有)的成员(成员方法和成员变量),私有的变量和方法没法继承 B:子类(不能)继承父类的(构造方法),但是可以通过super关键字去访问父类构造方法 ...
- 【Java基础】【08面向对象_继承&方法&final】
08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...
- 08-03 java 继承
继承格式,优缺点,概述: /* 继承概述: 把多个类中相同的内容给提取出来定义到一个类中. 如何实现继承呢? Java提供了关键字:extends 格式: class 子类名 extends 父类名 ...
- Java面向对象理解_代码块_继承_多态_抽象_接口
面线对象: /* 成员变量和局部变量的区别? A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生 ...
- 又一次认识java(四) — 组合、聚合与继承的爱恨情仇
有人学了继承,认为他是面向对象特点之中的一个,就在全部能用到继承的地方使用继承,而不考虑到底该不该使用,无疑.这是错误的.那么.到底该怎样使用继承呢? java中类与类之间的关系 大部分的刚開始学习的 ...
随机推荐
- 7-13 Power Calculus 快速幂计算 uva1374
想到快速幂 但是这题用不上 用迭代加深搜索 注意启发函数为 当前最大数<<(maxx-d) 如果大于n则剪枝 注意跳出语句的两种写法 一种170ms 一种390ms !!! d ...
- CentOS 5.x上配置JBoss6.x步骤图解教程
1.如何远程连接CentOS和文件上传下载 使用工具Xmanager下的Xbroswer 首先在Xbroswer下的Xshell下新建文件夹JavaPlatServer,新建一个Xshell Sess ...
- CodeForces - 612C Replace To Make Regular Bracket Sequence 压栈
C. Replace To Make Regular Bracket Sequence time limit per test 1 second memory limit per test 256 m ...
- 机器学习之路:python 文本特征提取 CountVectorizer, TfidfVectorizer
本特征提取: 将文本数据转化成特征向量的过程 比较常用的文本特征表示法为词袋法词袋法: 不考虑词语出现的顺序,每个出现过的词汇单独作为一列特征 这些不重复的特征词汇集合为词表 每一个文本都可以在很长的 ...
- CodeForces1070A Find a Number 图论
令状态$f(i, j)$表示模$d$为$i$,和为$j$时的最小数 可以通过$bfs$来转移 然而就没了... 复杂度$O(10ds)$ #include <queue> #include ...
- [PA2014]Pakowanie
[PA2014]Pakowanie 题目大意: \(n(n\le24)\)个物品和\(m(m\le100)\)个背包,每个物体有一个体积\(a_i\),每个背包有一个容量\(c_i\).问装完所有物品 ...
- 【10.26校内测试】【状压?DP】【最小生成树?搜索?】
Solution 据说正解DP30行??? 然后写了100行的状压DP?? 疯狂特判,一算极限时间复杂度过不了aaa!! 然而还是过了....QAQ 所以我定的状态是待转移的位置的前三位,用6位二进制 ...
- python日常碎碎念
关于取命令行中参数的方法 1,sys.argv 这个方法自动获取参数,并split.一般情况下第一个元素是程序的名字.即 python script.py arg1 arg2 然后sys.argv返回 ...
- .net orm类库 kiss.data 简单文档记录
kiss.data的简单记录 == [github地址](https://github.com/sdming/Kiss.Data) kiss.data是golang的数据库访问类库[kdb](http ...
- android点滴之ContentObserver的使用
一概念 ContentObserver用于观察(捕捉)特定Uri引起的数据的变化,继而做一些对应的处理,当ContentObserver所观察的Uri发生变化时,便会触发它. 从概念看ContentO ...