• Objective-C:继承的体现


    典型的继承例子:形状Shape为基类,继承它的类有:点类Point、圆类Circle、球体类Sphere、矩形类Rectangle、正方形类Square

            点类Point也为基类,继承它的类有:圆类Circle、球体类Sphere、矩形类Rectangle、正方形类Square

            圆类Circle也为基类,继承它的类有:球体类Sphere

            矩形类Rectangle为基类,继承它的类是:正方形类Square 

    //Shape类   .h和.m文件

     1 //  Shape.h
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  形状类
     7 
     8 #import <Foundation/Foundation.h>
     9 
    10 @interface Shape : NSObject
    11 @property(nonatomic,assign)CGFloat length;
    12 @property(nonatomic,assign)CGFloat area;
    13 @property(nonatomic,assign)CGFloat volum;
    14 -(void)draw;
    15 -(void) Area;
    16 -(void) Length;
    17 -(void) Volum;
    18 @end
     1 //  Shape.m
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  形状类
     7 
     8 #import "Shape.h"
     9 
    10 @implementation Shape
    11 -(void)draw
    12 {
    13     NSLog(@"drawing a Shape!");
    14 }
    15 -(void) Area{}
    16 -(void) Length{}
    17 -(void) Volum{}
    18 @end

    //Point类 .h和.m文件

     1 //  Point.h
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  点类
     7 
     8 #import "Shape.h"
     9 
    10 @interface MyPoint : Shape
    11 @property(nonatomic,assign) CGFloat x;
    12 @property(nonatomic,assign) CGFloat y;
    13 -(id)initWithX:(CGFloat)m andY:(CGFloat)n;
    14 -(void)show;
    15 @end
     1 //  Point.m
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  点类
     7 
     8 #import "MyPoint.h"
     9 
    10 @implementation MyPoint
    11 -(id)initWithX:(CGFloat)m andY:(CGFloat)n
    12 {
    13     self = [super init];
    14     if(self)
    15     {
    16         _x = m;
    17         _y = n;
    18     }
    19     return self;
    20 }
    21 -(void)draw
    22 {
    23     NSLog(@"drawing a point!");
    24 }
    25 -(void)show
    26 {
    27     NSLog(@"x:%.1f,y:%.1f",_x,_y);
    28 }
    29 @end

    //圆类Circle   .h和.m文件

     1 //  Circle.h
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/12.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  圆类
     7 
     8 #import "MyPoint.h"
     9 
    10 @interface Circle : MyPoint
    11 @property(nonatomic,assign)CGFloat radius;
    12 -(id)initWithX:(CGFloat)m andY:(CGFloat)n andRadius:(CGFloat)r;
    13 @end
     1 //  Circle.m
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/12.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  圆类
     7 
     8 #import "Circle.h"
     9 #define PI 3.14
    10 @implementation Circle
    11 -(id)initWithX:(CGFloat)m andY:(CGFloat)n andRadius:(CGFloat)r
    12 {
    13     self = [super init];
    14     if(self)
    15     {
    16         super.x = m;
    17         super.y = n;
    18         _radius = r;
    19     }
    20     return self;
    21 }
    22 -(void) Area
    23 {
    24     super.area = PI*_radius*_radius;
    25 }
    26 -(void) Length
    27 {
    28     super.length = 2*PI*_radius;
    29 }
    30 -(void)draw
    31 {
    32     NSLog(@"drawing a circle!");
    33 }
    34 -(void)show
    35 {
    36     [super show];
    37     NSLog(@"radius:%.1f,area:%.1f,Length:%.1f",_radius,super.area,super.length);
    38 }
    39 @end

    //球体类Sphere   .h和.m文件

     1 //  Sphere.h
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/12.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  球体类
     7 
     8 #import "Circle.h"
     9 
    10 @interface Sphere : Circle
    11 @property(nonatomic,assign)CGFloat z;
    12 -(id)initWithX:(CGFloat)m andY:(CGFloat)n andZ:(CGFloat)t andRadius:(CGFloat)r;
    13 @end
     1 //  Sphere.m
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/12.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  球体类
     7 
     8 #import "Sphere.h"
     9 #define PI 3.14
    10 @implementation Sphere
    11 @synthesize z;
    12 -(id)initWithX:(CGFloat)m andY:(CGFloat)n andZ:(CGFloat)t andRadius:(CGFloat)r
    13 {
    14     if(self = [super init])
    15     {
    16         super.x = m;
    17         super.y = n;
    18         z = t;
    19         super.radius = r;
    20     }
    21     return self;
    22 }
    23 -(void)draw
    24 {
    25     NSLog(@"draw a sphere!");
    26 }
    27 -(void) Area
    28 {
    29     super.area = 4*PI*super.radius*super.radius;
    30 }
    31 -(void) Volum
    32 {
    33     super.volum = 4/3*PI*super.radius*super.radius*super.radius;
    34 }
    35 -(void)show
    36 {
    37     NSLog(@"x:%.1f,y:%.1f,z:%.1f",super.x,super.y,z);
    38     NSLog(@"radius:%.1f,area:%.1f,volum:%.1f",super.radius,super.area,super.volum);
    39 }
    40 @end

    //矩形类Rectangle  .h和.m文件

     1 //  Rectangle.h
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  矩形类
     7 
     8 #import "MyPoint.h"
     9 
    10 @interface Rectangle : MyPoint
    11 
    12 @property(nonatomic,assign) CGFloat len;
    13 @property(nonatomic,assign) CGFloat hei;
    14 -(id)initWith:(CGFloat)m andY:(CGFloat)n andLen:(CGFloat) l andHei:(CGFloat)h;
    15 @end
     1 //  Rectangle.m
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  矩形类
     7 
     8 #import "Rectangle.h"
     9 
    10 @implementation Rectangle
    11 -(id)initWith:(CGFloat)m andY:(CGFloat)n andLen:(CGFloat) l andHei:(CGFloat)h
    12 {
    13     self = [super init];
    14     if(self)
    15     {
    16         self.x = m;
    17         self.y = n;
    18         _len = l;
    19         _hei = h;
    20     }
    21     return self;
    22 }
    23 -(void) Area
    24 {
    25    super.area = _len*_hei;
    26 }
    27 -(void) Length
    28 {
    29    super.length = 2*(_len+_hei);
    30 }
    31 -(void)draw
    32 {
    33     NSLog(@"drawing a Rectangle!");
    34 }
    35 -(void)show
    36 {
    37     [super show];
    38     NSLog(@"len:%.1f,hei:%.1f,area:%.1f,length:%.1f",_len,_hei,super.area,super.length);
    39 }
    40 @end

    //正方形类Square .h和.m文件

     1 //  Square.h
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  正方形类
     7 
     8 #import "Rectangle.h"
     9 
    10 @interface Square : Rectangle
    11 @end
     1 //  Square.m
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //  正方形类
     7 
     8 #import "Square.h"
     9 
    10 @implementation Square
    11 -(void) Area
    12 {
    13     self.area = super.len*super.hei;
    14 }
    15 -(void) Length
    16 {
    17     self.length = 4*self.len;
    18 }
    19 -(void)draw
    20 {
    21     NSLog(@"drawing a Square!");
    22 }
    23 -(void)show
    24 {
    25     [super show];
    26 }
    27 @end

    //主函数测试

     1 //  main.m
     2 //  继承
     3 //
     4 //  Created by ma c on 15/8/11.
     5 //  Copyright (c) 2015年. All rights reserved.
     6 //
     7 
     8 #import <Foundation/Foundation.h>
     9 #import "Shape.h"
    10 #import "Square.h"
    11 #import "MyPoint.h"
    12 #import "Rectangle.h"
    13 #import "Circle.h"
    14 #import "Sphere.h"
    15 int main(int argc, const char * argv[])
    16 {
    17     @autoreleasepool
    18     {
    19         Shape *shape = [[Shape alloc]init];
    20         [shape draw];
    21         printf("
    ");
    22         
    23         
    24         MyPoint *mypoint = [[MyPoint alloc]initWithX:0.0 andY:0.0];
    25         [mypoint draw];
    26         [mypoint show];
    27         printf("
    ");
    28  
    29         
    30         Circle *circle = [[Circle alloc]initWithX:1.1 andY:1.1
    31                                         andRadius:5.0];
    32         [circle Area];
    33         [circle Length];
    34         [circle draw];
    35         [circle show];
    36         printf("
    ");
    37         
    38         
    39         Rectangle *rectangle = [[Rectangle alloc]initWith:2.2 andY:2.2 andLen:3 andHei:8];
    40         [rectangle Area];
    41         [rectangle Length];
    42         [rectangle draw];
    43         [rectangle show];
    44         printf("
    ");
    45         
    46         
    47         Square *square = [[Square alloc]initWith:3.3 andY:3.3 andLen:4 andHei:4];
    48         [square Area];
    49         [square Length];
    50         [square draw];
    51         [square show];
    52         printf("
    ");
    53         
    54         Sphere *sphere = [[Sphere alloc]initWithX:4.4 andY:4.4 andZ:4.4 andRadius:6.0];
    55         [sphere Area];
    56         [sphere Volum];
    57         [sphere draw];
    58         [sphere show];
    59         printf("
    ");
    60     }
    61     return 0;
    62 }

    //运行结果

    2015-08-12 18:44:15.931 继承[1875:121866] drawing a Shape!
    
    2015-08-12 18:44:15.933 继承[1875:121866] drawing a point!
    2015-08-12 18:44:15.933 继承[1875:121866] x:0.0,y:0.0
    
    2015-08-12 18:44:15.933 继承[1875:121866] drawing a circle!
    2015-08-12 18:44:15.933 继承[1875:121866] x:1.1,y:1.1
    2015-08-12 18:44:15.933 继承[1875:121866] radius:5.0,area:78.5,Length:31.4
    
    2015-08-12 18:44:15.934 继承[1875:121866] drawing a Rectangle!
    2015-08-12 18:44:15.934 继承[1875:121866] x:2.2,y:2.2
    2015-08-12 18:44:15.934 继承[1875:121866] len:3.0,hei:8.0,area:24.0,length:22.0
    
    2015-08-12 18:44:15.934 继承[1875:121866] drawing a Square!
    2015-08-12 18:44:15.934 继承[1875:121866] x:3.3,y:3.3
    2015-08-12 18:44:15.934 继承[1875:121866] len:4.0,hei:4.0,area:16.0,length:16.0
    
    2015-08-12 18:44:15.935 继承[1875:121866] draw a sphere!
    2015-08-12 18:44:15.935 继承[1875:121866] x:4.4,y:4.4,z:4.4
    2015-08-12 18:44:15.935 继承[1875:121866] radius:6.0,area:452.2,volum:678.2
    
    Program ended with exit code: 0

    注释:继承Shape的形状基本都具有自己的坐标及其对应的属性(如半径、长、高、宽、面积、周长、体积等)。当然,视情况去定义。

          

  • 相关阅读:
    shell 读取文件内容 不以空格换行 再把每行的字符串切分取一部分
    Linux中basename和dirname命令的妙用
    Martiancloud 无注册中心微服务
    spring security自动续签功能
    访问c++类的私有成员
    Ubuntu 安装 docker 及 镜像加速
    谷歌浏览器表单自动填充颜色修改(antd)
    关于复制粘贴失效解决办法
    常见的HTTP状态码(HTTP Status Code)
    Linux 环境安装 MySQL
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4725355.html
Copyright © 2020-2023  润新知