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中类与类之间的关系 大部分的刚開始学习的 ...
随机推荐
- ref:JAVA之Forward和Redirect的区别
ref:https://www.cnblogs.com/selene/p/4518246.html 阅读目录 一:间接请求转发(Redirect) 二:直接请求转发(Forward) 用户向服务器发送 ...
- 【运维理论】RAID级别简介
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(RAID, Redundant Array of Inexpensive ...
- OpenVAS漏洞扫描基础教程之连接OpenVAS服务
OpenVAS漏洞扫描基础教程之连接OpenVAS服务 连接OpenVAS服务 当用户将OpenVAS工具安装并配置完后,用户即可使用不同的客户端连接该服务器.然后,对目标主机实施漏洞扫描.在本教程中 ...
- hdu1312 Red and Black
I - Red and Black Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- CodeForces1082G Petya and Graph 最小割
网络流裸题 \(s\)向点连边\((s, i, a[i])\) 给每个边建一个点 边\((u, v, w)\)抽象成\((u, E, inf)\)和\((v, E, inf)\)以及边\((E, t, ...
- OI刷题记录(Updating)
[Counter] [AGC]:0/96 [ARC]:0/70 [2016年省选]:0/69 [2017年省选]:22/75 [2018年省选]:0/63 [ZROI2018]:0/30 [ZROI2 ...
- 在Hexo中渲染MathJax数学公式
最近学机器学习涉及很多的数学公式,公式如果用截图显示,会比较low而且不方便.因此需要对Hexo做些配置,支持公式渲染.同时文末整理了各种公式的书写心得,比如矩阵.大小括号.手动编号.上下角标和多行对 ...
- HDU 4267 A Simple Problem with Integers 多个树状数组
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- opencv第二课 进行缩放图片~
#include<stdio.h> #include<iostream> #include<opencv2\opencv.hpp> using namespace ...
- Matlab 常用绘图指令(二维图形)
使用matlab的时候常常会忘掉一些指令,每次都要重新查找,挺麻烦的,这里收集一些常用的绘图指令,供自己和大家以后方便查找和使用. 1.例子-包含了常用绘图命令 clear clc %%数据准备 x ...