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中类与类之间的关系 大部分的刚開始学习的 ...
随机推荐
- 8-4 Fabled Rooks uva11134
题意:你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内 给出该矩形左上角坐标和右下角坐标四个点 必须满足放车的位置在矩形内 边上 ...
- Java8Lambda表达式
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个 ...
- Bzoj4710 分特产(容斥原理+组合数)
题面 Bzoj 题解 考虑容斥原理,所有人都有特产的方案数等于: 至少零个人没有特产\(-\)至少一个人没有特产\(+\)至少两个人有特产\(-...\) 接着考虑其中一种情况怎么求(假设现在至少有\ ...
- Hades:移动端静态分析框架
只有通过别人的眼睛,才能真正地了解自己 ——<云图> 背景 作为全球最大的互联网 + 生活服务平台,美团点评近年来在业务上取得了飞速的发展.为支持业务的快速发展,移动研发团队规模也逐渐从零 ...
- Oracle 判断为空 all space
You can use trim on the column. where trim(product_type) is null The above is not DBMS-independent, ...
- python 全排列
itertools模块现成的全排列: for i in itertools.permutations('abcd',4): print ''.join(i) 相关全排列算法: def perm(l): ...
- type="submit"表单提交理解
1.默认为form提交表单 . button则响应用户自定义的事件,如果不指定onclick等事件处理函数,它是不做任何事情.当然,button也可以完成表单提交的工作. 2.method=" ...
- int类型的整数转换成汉字
int类型的整数转换成汉字 一.源代码:IntegerNumberToChinese.java package cn.com.zfc.example; import java.util.Scanner ...
- PHP 笔记——文件引用
1. 文件路径 "文件路径"指的是被包含文件所在的绝对路径或相对路径. 在相对路径中,"./"表示当前目录,"../"表示当前目录的上级目录 ...
- OpenGL ES 3.0 图元装配
1. 前言 之前已经把纹理的渲染给弄出来了,但是又遇到一个新的问题,那就是图元装配,比如说我已经把图片给显示出来了,但是呢,并没有做到让它显示到具体的位置,而跟这个位置相关的则需要靠图元装配. 图元装 ...