您好,欢迎访问三七文档
面向对象佟刚mail:simpleit@163.com新浪微博:@_TongGang相关定义•类:表示对象的类型,对象引用类来获取和本身有关的各种信息。•对象:包含值和指向其类的隐含指针。也成为实例•消息:对象可以执行的操作,用于通知对象去做什么.•方法:相应消息而生成的代码•接口:对象的类应该提供的特性的描述.•实现:使接口正常工作的代码@interface•创建某个特定类的对象之前,Objective-C编译器需要一些有关该类的信息。特别地,它必须知道对象的数据成员和它提供的特性。使用@interface指令把这种信息传递给编译器。@interface实例类名父类属性,成员变量方法声明-表示为实例方法,+表示类方法@implementation•@interface:Circle:用于定义类的公共接口.接口被成为API(applicationprogramminginterface)•@implementation部分为真正起作用的代码•@implementation是一个编译器指令,表明将要为某个类提供代码.类名出现在@implementation之后•可以在@implementation中定义在@interface中无相应声明的方法.可以把它们看成是私有方法,仅在类的实现中使用.@implementaion实例实例化对象•为了创建新对象,需要向相应的类发送new消息.•在Objective-C上,调用方法的简单格式是–[实例方法];–[类名方法];练习1•扩展示例程序,加入其它图形:Rectangle,Egg.在每个类中添加draw()方法,在main方法中声明id数组,分别存放Circle,Rectangle,Egg对象,遍历调用这些对象的draw方法.练习2•定义一个名为XYPoint的类,用来保存笛卡尔坐标(x,y),其中x和y均为整数.定义一些方法,分别用来设置点的坐标x,y,编写一个Objective-C程序实现这个新类并测试.练习3•创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。继承•语法:类名父类继承下的实例变量PersonnameageStudentschool继承关系图isanameageschool实例变量分布图(NSObject)(Person)(Student)self•self:指向接收消息的对象的指针(Java的this)•方法使用self参数查找它们要使用的实例变量:self指向继承链中第一个类的第一个实例变量的内存地址,通过在该地址加上偏移地址,编译器就可以查找其它实例变量的位置.练习4(1)定义一个ManKind类,包括–成员变量intsex和intsalary;–方法voidmanOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);–方法voidemployed():根据salary的值显示“nojob”(salary==0)或者“job”(salary!=0)。(2)定义类Kids1继承ManKind,并包括–成员变量intyearsOld;–方法printAge()打印yearsOld的值。(3)在main方法中实例化Kids1的对象someKid,用该对象访问其父类的成员变量及方法。练习5根据下图实现类。在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积。Circle(圆)radius:doublesetRadius(doubleradius):voidradius():doublefindArea():double计算圆的面积Cylinder(圆柱)length:doublesetLength(doublelength):voidlength():doublefindVolume():double计算圆柱体积重写方法在子类中可以根据需要对从父类中继承来的方法进行改造—覆盖方法(方法的重置、重写),在程序执行时,子类的方法将覆盖父类的方法。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。练习6•修改练习4中定义的类Kids1,在Kids1中重新定义employed()方法,覆盖父类ManKind中定义的employed()方法,输出“Kidsshouldstudyandnojob.”super在Objective-C中使用super来引用父类的成分–super可用于调用父类中定义的成员方法练习7•修改练习6中定义的类Kids1中employed()方法,在该方法中调用父类ManKind的employed()方法,然后再输出“butKidsshouldstudyandnojob.”练习8修改练习5中定义的Cylinder类,在Cylinder类中覆盖findArea()方法,计算圆柱的表面积。考虑:findVolume方法怎样做相应的修改?在main方法中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的表面积和体积。
本文标题:面向对象
链接地址:https://www.777doc.com/doc-3426284 .html