zoukankan      html  css  js  c++  java
  • 对“面向对象”思想的理解

    我们学习C++语言必须要掌握对象和类,这样的话就可以更深层次的理解C++这种面向对象的程序开发理念,从而更好更快地掌握C++的变成思想和方法。掌握类和对象是C++语言变成的基础。那么,问题来了,到底什么是对象和类呢?

    一:对象
    关于对象的理解其实非常简单。在我们的身边,每一种事物都是一种对象,统筹一句话概括就是,对象是事物存在的实体。例如:电视、汽车、  书桌、楼房包括我们人类自身都是一种对象。对象的话又划分为两种,即静态和动态两部分。静态:顾名思义,指的就是不能动的部分。就拿我们自  身来说,每个人的你年龄、性别、身高、体重等都属于静态。而这些特征都可概括为属性,所有的对象都具备属性。动态:即具备这些属性的人可能  做出的行为和动作(微笑、哭泣、行走、奔跑等)。人类通过探讨对象的属性和观察对象的行为来了解对象。
    二:类
    简单概括,类是封装对象属性和行为的载体,反过来说具有相同属性和行为的一类实体被成为类。举一个简单的例子,鸟类。鸟类封装了所有鸟  的具体属性(嘴、翅膀、爪子)和具有的行为(飞行、捕食)。这样说,相信大家都能理解。说到对象,不得不重点提一下对象的三个基本特征:  封装、继承、多态。
    三:封装
     定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。

     封装的目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,特定的访问权限来使用类的成员。

     封装的基本要求:把所有的属性私有化,对每个属性提供get和set方法,如果有一个带参数的构造函数的话,那一定要写一个不带参数的构造函数。在  开发的时候经常要对已经编写的类进行测试,所有在有的时候还要重写toString方法,但这不是必须的。

    四:继承(extends)
    目的:实现代码的复用。

    介绍:当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。继承后子  类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性(private)和构造方法不能被继承。另外子类可以写自己特有的属性和方法,目  的 是实现功能的扩展,子类也可以复写父类的方法,即方法的重写。子类不能继承父类中访问权限private的成员变量和方法。子类可以重写父类的方  法,  命名与父类同名的成员变量。有的时候我们需要这样的需求:我们需要将某些事物尽可能地对这个世界隐藏起来,但是允许子类的成员来访问他  们。这  个时候就需要使用到protected。

    用法:1、找出具有共同属性和行为的对象。

               2、设计代表共同状态和行为的类。(父类)

               3、决定子类是是否需要让某项行为具有特定不同的运作方式。- - - - - -对继承的覆盖(覆写)。

               4、通过寻找使用共同行为的子类找出更多抽象化的机会。

               5、完成类的继承层次化。

    五:多态
     概念:同一消息可以根据发送对象的不同而采用多种不同的行为方式,根据其实际类型调用其相应的方法。

     实现方式:

    (1)基于继承实现的多态

     基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。

    (2)基于借口实现的多态

    继承是通过重写父类的同一方法的几个不同子类来体现的,那么就是通过实现接口,覆盖接口中同一方法中不同的类来体现的。在接口的多态  中,指向接口的引用必须是指定实现了该接口的一个类的实例程序。在运行时,根据对象引用的实际类型来执行对应的方法。继承都是单继承,只能  为 一组相关的类提供一直的服务接口,但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的  服 务接口。所以它相对于继承来说有更好的灵活性。

    好处:程序的可扩展性及可维护性增强。

    总结:
    1.封装是为了对物与外界交流进行抽象。
    2.继承是为了对物的信息进行抽象。
    3.多态是为了对物的行为进行抽象。

    说到这里,给大家稍微扩展一下关于抽象和接口一些相关信息。

    抽象(abstract)
    介绍:在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中
    没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表示我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把他们实例化(拿不出一个具体
    的东西),所以称之为抽象。

    例如:publicabstract void xuesheng ();

     关于抽象方法:

        1、抽象类中可以有抽象方法,也可以有非抽象方法。    
        2、抽象类中可以全都是非抽象方法。
        3、一个抽象类中如果没有抽象方法,那么这个类不能实例化,反之如果有抽象方法,那么这个类一定是抽象类。

    接口(interface)
     概念:把原有的事物与功能增强,在不改变类方法的前提下,进一步进行功能扩展。

     接口归纳:

          1、在JAVA中接口是一种专门的类型,用关键字interface来定义。
          2.、接口中只能定义抽象方法,不能有方法体,一定是public修饰。(接口中的方法都是抽象的)
          3、接口中可以定义变量,但实际上是static final 修饰的变量。
          4、接口中不能定义静态方法。

     接口的定义:

    public interface Interface{
       static final int i;  //接口中不能有普通数据成员,只能够有静态的不能被修改的数据成员,static表示全局,final表示不可修改,可以不用static  final 修饰,会隐式的声明为static和final

       public void xuesheng1();  //接口中的方法一定是抽象方法,所以不用abstract修饰

       public void xuesheng2();  //接口中不能赋予方法的默认行为,即不能有方法的具体实现
    }


    抽象与接口的联系
     1、一个接口可以被多个类实现,一个类也可以实现多个接口。
     2、接口中所有定义的字段默认都是public static final的属性,写不写没有区别。
     3、接口中的方法都是抽象方法,并且抽象的方法默认都是public abstract修饰的。不能用其他的修饰符修饰,可以不写。
     4、接口中没有构造方法。
     5、接口不是类。尤其不能使用new来实例化一个接口。但是可以声明接口的变量,这个变量可以指向实现了此接口的子类。

           总而言之,抽象类是一种功能不全的类,接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。从某种意义上说,接口是一种特殊形式的抽象类,在JAVA语言中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。在许多情况下,接口确实可以代替抽象类,前提是你不需要刻意表达属性上的继承的话。

      面向对象就是将抽象的事物具体化(唯一性),再将其封装(实现复用),

    Copyright @WinkJie
  • 相关阅读:
    sdk 今日头条_字节跳动又一Android开源力作!全新视频动画特效SDK
    Android播放透明视频(转载)
    git remote: warning: suboptimal pack
    'gitclone报错fatal:protocolerror:badpackheader'
    解决 Maven 无法下载 fastdfs-client-java 依赖。
    教我兄弟学Android逆向12 编写xposed模块
    教我兄弟学Android逆向11 动态调试init_array
    CommunicationsException
    使用css给table表格表头添加斜线(斜线表格)
    [SAA + SAP] 28. Monitoring
  • 原文地址:https://www.cnblogs.com/WinkJie/p/11788959.html
Copyright © 2011-2022 走看看