zoukankan      html  css  js  c++  java
  • OC的封装、继承与多态

         面向对象有三大特征:封装、继承和多态。

    一、封装

          封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。简而言之,信息隐藏,隐藏对象的实现细节,不让用户看到,以此来增强安全性和简化编程,进而达到封装的目的。

          使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

         访问修饰符:private、protect、public

    private:私有的,不可供外部访问的信息,只有类本身能存取.

    protect:受保护的,类和派生类可以存取.

    Internal:只有同一个项目中的类可以存取.

    Protected Internal:是Protected和Internal的结合. 

    Public:公有的,完全共享存取.

    二、继承

       Objective-C 的继承具有单继承的特点,每个子类都只能有一个直接父类。然而,他可以有无限多个间接父类。

       当子类继承父类时,子类可以得到父类的:

      1.全部成员变量

      2.全部方法

    OC中子类继承父类语法格式:

    1 @interface 类名:父类名
    2 {
    3 //成员变量
    4 }
    5 //方法
    6 @end

    另外,需要注意的是NSObject类是根类,所有的类的父类(直接父类或间接父类)。

    说到父类,就得讲到super关键字

          super关键字在实例方法中代表父类对象的本身,在类方法中代表父类,可以使用super关键字调用从父类继承下来的方法。

          在实例方法中使用super只能调用到父类的实例方法,在类方法中使用super只能调用到父类的类方法。

    1 @interface Person:NSObject
    2 {
    3 
    4 }
    5 -(void)run;//这是实例方法
    6 +(void)sleep;//这是类方法
    7 @end
    @interface Student:Person
    {
    
    }
    @end
    1 @implementation Student
    2 -(void)testRun{
    3   [super sleep];//这是错误的,因为sleep是类方法。在实例方法中,super只能调用父类的实例方法
    4   [super run];
    5 }
    6 +(void)testSleep{
    7   [super sleep];
    8   [super run];/这是错误的,因为run是实例方法。在类方法中,super只能调用父类的类方法
    9 }

    三、多态

       多态:一种事物的多种形态。不同类的对象可以定义共享相同名称的方法,这个就是多态的表现形式。

      实现多态的条件:

    1.必须存在继承关系

    2.子类重写父类的方法

    3.父类声明的变量指向子类对象

    OC指针类型的变量有两个:编译时类型和运行时类型。编译时类型由声明变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。

    1 @interface Person:NSObject
    2 {
    3 }
    4-(void)run;
    5 @end
    1 @interface Student:Person
    2 {
    3 
    4 }
    5 @end
    1 @interface Teacher:Person
    2 {
    3 
    4 }
    5 @end

    1
    Person *personStudent=[[Student alloc]init];//此时编译时类型和运行时类型不一致,发生多态 2 [personStudent run]; 3 Person *personTeacher=[[Teacher alloc]init]; 4 [personTeacher run];//父类Person的run方法表现的形式为多种形态,这就叫多态
  • 相关阅读:
    软件体系结构基本概念汇总
    开发,从需求出发 · 之三 春天在哪里
    chrome模拟手机功能
    Codeforces 2
    ViewPager 入门一
    软考之路--最后的最后,我们都是天使
    分享一段php获取随意时间的前一天代码
    [App Store Connect帮助]七、在 App Store 上发行(2.5)设定价格与销售范围:向企业或教育机构分发您的 App
    [App Store Connect帮助]七、在 App Store 上发行(2.3)设定价格与销售范围:为您的 App 选择地区
    [App Store Connect帮助]七、在 App Store 上发行(2.4)设定价格与销售范围:安排价格调整
  • 原文地址:https://www.cnblogs.com/fmdxiangdui/p/5068104.html
Copyright © 2011-2022 走看看