这第4篇内容比較少,主要说的是obj-c中的类的继承,须要说明的是我仅仅是写了继承中最简单的形式,假设所有展开来说,那就多了去了!关键是如今肚子里还没装够墨水,没法展开啊!

以下的代码中,我们写了2个类:父类A和子类B,然后B中对A中的方法做了重写。

#import <Foundation/Foundation.h>

@interface A:NSObject{
int i;
}
@property int i;
-(void)print;
@end @implementation A
@synthesize i; -(void)print{
NSLog(@"[class A][i:%d]:hello!",i);
}
@end @interface B:A{
int j;
}
@property int j;
@end @implementation B
@synthesize j; -(void)print{
NSLog(@"[class B:A][i:%d,j:%d]hello!",i,j);
}
@end int main(int argc,char *argv[])
{
@autoreleasepool{
NSLog(@"hello obj-c!");
A *a = [[A alloc] init];
B *b = [[B alloc] init]; a.i = 101;
b.i = 1001;
b.j = 1002; [a print];
[b print];
}
return 0;
}

编译执行结果例如以下:

apple@kissAir: objc_src$clang -fobjc-arc -framework Foundation 1.m -o 1

apple@kissAir: objc_src$./1

2014-06-29 10:34:30.547 1[1035:507] hello obj-c!

2014-06-29 10:34:30.549 1[1035:507] [class A][i:101]:hello!

2014-06-29 10:34:30.549 1[1035:507] [class B:A][i:1001,j:1002]hello!

好,以下我们略微改动一下class A中实例变量i的定义,使它成为私有,即不在@interface中定义而在@implementation中定义i。这时编译时会发现class B中print会报错:

apple@kissAir: objc_src$clang -fobjc-arc -framework Foundation 1.m -o 1

1.m:34:41: error: instance variable 'i' is private

NSLog(@"[class B:A][i:%d,j:%d]hello!",i,j);

改正也非常easy呢,直接 self.i就可以,以下是改动后的完整代码:

#import <Foundation/Foundation.h>

@interface A:NSObject
@property int i;
-(void)set_i:(int)i;
-(void)print;
@end @implementation A{
int i;
}
@synthesize i; -(void)set_i:(int)i_v{
i = i_v;
} -(void)print{
NSLog(@"[class A][i:%d]:hello!",i);
}
@end @interface B:A{
int j;
}
@property int j;
@end @implementation B
@synthesize j; -(void)print{
NSLog(@"[class B:A][i:%d,j:%d]hello!",self.i,j);
}
@end int main(int argc,char *argv[])
{
@autoreleasepool{
NSLog(@"hello obj-c!");
A *a = [[A alloc] init];
B *b = [[B alloc] init]; //a.i = 101;
//b.i = 1001;
[a set_i:99];
[b set_i:199];
b.j = 1002; [a print];
[b print];
}
return 0;
}

[2014-06-30 第一次添加内容:实例变量的可见性]:

我们上面谈到了定义类实例变量的语法,事实上对于实例变量的可见范围还能够进一步细化控制,主要有4种可见性,默认是第1种:

1 @protected:实例变量能够被该类和子类直接訪问(默认);

2 @private:实例变量仅仅能被该类方法訪问;

3 @public:实例变量能够被该类,子类以及外部方法訪问(须要用->语法,见以下代码);

4 @package:在64位映像中,实例变量可在映像的不论什么位置被訪问。(不太明确哦)

以下上代码吧:

#import <Foundation/Foundation.h>

@interface A:NSObject{
@private
int pri_i;
@protected
int i;
@public
int pub_i;
}
@property int i,pri_i;
-(void)set_i:(int)i;
-(void)print;
@end @implementation A
@synthesize i=i,pri_i=pri_i; -(void)set_i:(int)i_v{
i = i_v;
} -(void)print{
NSLog(@"[class A][i:%d,pri_i:%d,pub_i:%d]:hello!",i,pri_i,pub_i);
}
@end @interface B:A{
int j;
}
@property int j;
@end @implementation B
@synthesize j; -(void)print{
//NSLog(@"[class B:A]pri_i : %d",pri_i); ERR!pri_i is privated!
NSLog(@"[class B:A][i:%d,j:%d]hello!",i,j);
}
@end int main(int argc,char *argv[])
{
@autoreleasepool{
NSLog(@"hello obj-c!");
A *a = [[A alloc] init];
B *b = [[B alloc] init]; a->pub_i = 10;
b->pub_i = 20;
//a.i = 101;
//b.i = 1001;
[a set_i:99];
[b set_i:199];
b.j = 1002; [a print];
[b print];
}
return 0;
}


obj-c编程04:类的继承的更多相关文章

  1. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

    面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...

  2. Java编程里类的继承

    今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...

  3. python自动化测试学习笔记-7面向对象编程,类,继承,实例变量,邮件

    面向对象编程(OOP)术语: class TestClass(object):   val1 = 100       def __init__(self):     self.val2 = 200   ...

  4. Python 进阶_OOP 面向对象编程_类和继承

    目录 目录 类 最简单的类 类方法 构造器 __init__ 创建一个类 实例化一个对象 调用实例的方法和属性 创建子类 使用 super 来调用父类的构造器 实例化子类对象 调用子类的属性和方法 类 ...

  5. 3、二、c# 面向对像编程。类,结构、C# 数据类型(引用类型、值 类型、指针类型)、ref参数与out参数、方法的重载、静态类型与静态成员、继承与多态、委托与事件

    一.类 定义类使用class关键字. <access specifier> class class_name { // member variables 成员变量 <access s ...

  6. 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法

    继承 概念: ①   继承背后的思想就是基于已存在的类来构建新类; ②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③   当从其它类导出的类叫作子 ...

  7. Objective-C编程 — 类和继承

    讲述面向对象中的一个重要概念——继承,使用继承 可以方便地在已有类的基础上进行扩展,定义一个具有父 类全部功能的新类. 父类和子类 我们在定义一个新类的时候,经常会遇到要定义的新类是某个类的扩展或者是 ...

  8. 【PHP面向对象(OOP)编程入门教程】11.类的继承

    继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着及其重要的作用,好像没听说哪个面向对象的语言不支持继承. 继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或 ...

  9. JavaScript 面向对象的编程(三) 类的继承

    定义父类和子类的继承关系 //声明父类 function SuperClass(){ this.superValue = true; } //为父类添加共有方法 SuperClass.prototyp ...

随机推荐

  1. WinForm、wpf、silverlight三者关系

    最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分.但是我目前对于.NET的WinForm.wpf.silverlight这三者的关系弄的不是很清楚,一般书中很少介绍wpf和 ...

  2. 同步特定源代码到 omni_rom源代码目录里面

    #!/bin/bash base_path="/Volumes/Android/omnirom_5.0" #此目录是我存放源代码的目录 xiaomi_device="de ...

  3. Arrays.asList()

    1.数组--->List String[] ss={"abc","def","xyz","aaaaaaaa",&q ...

  4. 采用Eclipse中间Maven构建Web项目错误(一)

    采用Eclipse中间Maven构建Web工程 1.在进行上述操作时.pom.xml一直报错 <project xmlns="http://maven.apache.org/POM/4 ...

  5. PHPSingleton模式的例子

    在这篇文章中PHPSingleton模式的解释不一定好!仅举它的一个例子.其目的是为了让自己通过一个例子来加深对Singleton模式的理解!这里,以供参考! 单例:能够简单的理解是通过一个类,仅仅能 ...

  6. Poj3414广泛搜索

    <span style="color:#330099;">/* D - D Time Limit:1000MS Memory Limit:65536KB 64bit I ...

  7. 最少拦截系统(杭电1257)(DP)+(贪心)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. [ACM] POJ 3686 The Windy&#39;s (二分图最小权匹配,KM算法,特殊建图)

    The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4158   Accepted: 1777 Descr ...

  9. Swing动画之游戏角色

    一.动画效果:实现了飞机飞行的动画效果,也实现了飞机的移动. 二.实现原理: 1.飞机飞行 的效果:事实上也还是重写paintComponent,依照一定的时间间隔更换图片就有了飞行的效果,动画就是更 ...

  10. 父类中可继承方法在处理private的一个demo

    public abstract class AbstractParent { public AbstractParent() { System.out.println("Hello,pare ...