`
XiangdongLee
  • 浏览: 91188 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

面向对象

    博客分类:
  • Java
 
阅读更多
本文围绕以下五个部分展开:

一、面向对象(Object–Oriented)
二、封装(Encapsulation)
三、继承(Inheritance)
四、多态(Polymorphism)
五、方法重载(overload)与方法重写(override)






一、面向对象(Object–Oriented)

        1. 面向对象

        面向对象的基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计。

        它从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以现实世界中的事物(即对象)为中心来思考、认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的类,作为系统的基本构成单元。这使得软件系统的组件可以直接映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌。

        2. 类(class)

        类是具有共同属性、共同方法的一类事物。类的对一类事物的描述,是抽象的、概念上的定义。

        类是整个软件系统最小的程序单元。

        类定义 = Field(属性、字段) + Method(方法、行为) + 构造器。

        (1)属性:一类事物的内部状态数据。(程序只要记录业务关心的状态数据即可,没必要记录该事物的所有状态数据)

        (2)方法:操作这些状态数据的方法,以及为这类事物的行为特征提供相应的实现。

        (3)构造器:用于构造该类的实例。Java通过new关键字来调用构造器,从而返回该类的实例。
        构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的无参构造器;一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。

        以上三种成员都可以定义0个或者多个。

        3. 对象(object)

        对象是面向对象方法中最基本的概念,是面向对象程序设计的中心。

        对象直接映像成客观世界的各种事物。

        对象的基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。

        Java里的对象具有唯一性,每个对象都有一个标识来饮用它,如果某个对象失去了标识,这个对象将变成垃圾,只能等着系统垃圾回收机制来回收它。

        Java语言不允许直接访问对象,而是通过对对象的引用来操作对象。

        4. 类和对象的关系

        类可以生成多个对象。

        类是对象的抽象,对象是类的实例(instance)。

        5. 抽象

        抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。

        抽象并不打算了解全部问题,而只是考虑部分问题。例如,需要考察Person对象时,我们不可能在程序中把Person的所有细节都定义出来,通常只能定义Person的部分数据、部分行为特征——而这些数据和行为特征是软件系统所关心的部分。

        虽然抽象是面向对象的重要部分,但它不是面向对象的特征之一。因为所有的编程语言都需要抽象。

        6. 消息

        对象间的相互合作需要一个机制协助进行,这样的机制称为“消息”。

        消息是一个实例与另一个实例之间相互通信的机制。

        7. 三个基本特征

        (1)封装:Encapsulation

        (2)继承:Inheritance

        (3)多态:Polymorphism

        8. 为什么Java是面向对象的语言?

        判断一门语言是否是面向对象的,通常可以使用继承和多态来加以判断。

        Java完全支持面向对象的三种基本特征:继承、封装和多态。

        Java完全以对象为中心,Java程序的最小程序单位是类,整个Java程序是由一个一个的类组成。

        Java完全支持使用对象、类、继承、封装、消息等基本概念来进行程序设计,允许从现实世界中客观存在的事物(即对象)出发来构造软件系统,在系统构造中尽可能运用人类的自然思维方式。


二、封装(Encapsulation)

        1. 概念

        它指的是:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

        因此需要从以下两方面考虑:

        (1)将对象的属性和实现细节隐藏起来,不允许外部直接访问。

        (2)把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作。

        因此,封装实际上有两方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来。

        2. 对一个类或对象实现良好的封装,可以实现以下目的:

        (1)隐藏类的实现细节。

        (2)让使用者只能通过事先预定的方式来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问。

        (3)可进行数据检查,从而有利于保证对象信息的完整性。

        (4)便于修改,提高代码的可维护性。

        3. 访问控制符

        封装通过访问控制符来实现。

        Java提供3个访问控制符:private、protected和public,分别代表了3个访问控制级别。另外还有一个不加任何访问控制符的访问控制级别,因此共有4个访问控制级别。




三、继承(Inheritance)


        1. 概念

        (1)它是面向对象实现软件复用的重要手段。当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法。

        (2)继承的类:子类。被继承的类:父类/基类/超类。

        (3)Java的继承通过extends关键字实现。

        (4)Java是单继承:只能有一个直接父类。但是,可以有无限多个间接父类。

        (5)java.lang.Object类是所有类的父类,要么是直接父类,要么是间接父类。因此所有的对象都可以调用该类所定义的实例方法。


四、多态(Polymorphism)

        1. 概念

        它指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征。这意味着,同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。

        2. 向上转型(upcasting)

        因为子类其实是一种特殊的父类,因此Java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换。这被称为“向上转型”,它由系统自动完成。

        3. 编译时类型与运行时类型

        (1)Java引用变量有两个类型:编译时类型和运行时类型。

        编译时类型由声明该变量时使用的类型决定;运行时类型由实际赋给该变量的对象决定。

        如果编译时类型和运行时类型不一致,就可能出现所谓的多态。

        (2)引用变量只能调用声明该变量时所用类里包含的方法。

        比如:通过 Object p = new Person() 代码定义一个变量p,则这个p只能调用Object类的方法,而不能调用Person类里定义的方法。

        (3)对象的Field不具备多态性。通过引用变量来访问其包含的实例Filed时,系统总是试图访问它编译时类型所定义的Field,而不是它运行时类型所定义的Field。


五、方法重载(overload)与方法重写(override)

        1. 方法重载

        (1)如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,就被称为方法重载。

        (2)“两同一不同”:同一个类中,方法名相同,参数列表不同。

        至于方法的其他部分,如:方法返回值类型、修饰符等,都与方法重载没有任何关系。

        2. 方法重写

        (1)子类包含与父类同名方法的现象被称为方法重写,也叫方法覆盖(Override)。

        (2)“两同两小一大”:

            “两同”:方法名相同、形参列表相同。

            “两小”:子类方法返回值类型应比父类方法返回值类型更小或相等;子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等。

            “一大”:子类方法的访问权限应比父类方法的访问权限更大或相等。

        (3)覆盖和被覆盖的方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。

        (4)如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此子类无法访问和重写。如果子类中定义了一个与父类private方法具有相同的方法名和形参列表、返回值类型的方法,则不是重写,而只是在子类中重新定义了一个新的方法。

        3. 二者比较

        (1)把二者放在一起比较没有太大的意义,二者联系很少。

        (2)类似:都发生在方法之间;都要求方法名相同。

        (3)重载主要发生在同一个类的多个同名方法之间;而重写发生在子类和父类的同名方法之间。

        (4)当然,父类方法和子类方法之间也可能发生重载。因为子类会获得父类方法,如果子类定义了一个与父类方法有相同的方法名,但参数列表不同的方法,就会形成父类方法和子类方法的重载。



整理时重点参考:《疯狂Java讲义》(第2版) - 李刚 编著
1
2
分享到:
评论
1 楼 mute_ 2015-08-23  
啦啦啦 博主好腻害奥

相关推荐

    易语言面向对象编程 面向对象学习

    易语言面向对象学习 1 一.枯燥的理论 2 1.对象和类 2 2.类的“成员”与“方法” 2 3.实例化 2 4.继承 3 二.牛刀小试 3 1.定义一个类,生成实例对象 3 2.“_初始化” 与 “_销毁” 5 三.一个更丰富的“员工...

    plc面向对象编程架构与实现

    面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...

    面向对象葵花宝典-电子版

    面向对象是目前最流行的一种程序设计和实现思想,无论你是从事企业级开发、互联网应用开发,还是手 机软件开发,都会使用到面向对象的技术;主流的编程语言中,C++,Java,C#,PHP,Python等都是支持 面向对象的语言;...

    面向对象概要设计模板

    面向对象概要设计模板 面向对象设计是一种软件设计方法,它强调对象之间的交互和协作,以达到软件系统的高内聚、低耦合的目标。在软件设计中,面向对象设计方法可以帮助开发者更好地理解系统的需求和行为,从而提高...

    实用面向对象软件工程教程

    本教程“实用面向对象软件工程教程”旨在深入探讨面向对象分析(OOA)和面向对象设计(OOD)的关键原则,帮助开发者构建高质量、可维护的软件系统。 在面向对象分析阶段,我们首先理解问题域,识别出关键实体和它们...

    Python 3面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    面向对象分析与设计UML2.0(PDF)

    详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。本书使用最常见的技术和方法,通过一个贯穿全书的案例分析,对面向对象的软件开发过程和使用面向对象技术的编程过程进行了...

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较 软件开发历程与架构演进 软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,这一进程不仅反映了编程技术的不断进步,更是软件工程...

    软件工程面向对象分析实验报告

    面向对象分析(Object-Oriented Analysis,OOA)是软件工程中的一种重要方法,它着重于从实际问题出发,抽象出问题域内的对象及其相互关系,以构建问题域模型。在“软件工程-张海藩编著--面向对象分析实验报告”中,...

    面向对象软件工程

    《面向对象软件工程》 作者:Stephen.R.Schach 学校:(美)范德比尔特大学 书名原名:Objected-Oriented Software Engineering 目录: 第一部分 面向对象软件工程简介  第一章 面向对象软件工程的范畴  第二章 ...

    java面向对象编程源码

    本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...

    漫画面向对象编程 Java

    借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...

    C++面向对象程序设计教程——课件PPT

    C++是一种强大的编程语言,以其面向对象特性而闻名,它结合了过程化编程和面向对象编程的优势。在“C++面向对象程序设计教程——课件PPT”中,我们可以深入学习这一主题,由陈维兴和林小茶编著,清华大学出版社出版...

    面向对象JavaScript精要(英文原版pdf)

    ### 面向对象JavaScript精要 #### 一、书籍概览 本书《面向对象JavaScript精要》由Nicholas C. Zakas编写,是面向对象编程领域中的权威指南之一,尤其针对JavaScript这门语言。作者深入浅出地介绍了面向对象编程的...

    Matlab面向对象编程

    Matlab面向对象编程是一种在MATLAB环境下通过面向对象的方法来组织和构造程序代码的技术。面向对象编程(OOP)的基本特征包括抽象、封装、继承和多态。以下是根据给定的文件信息,对这些知识点的详细解释: 1. 抽象:...

    面向对象分析与设计1

    国外计算机科学经典教材-面向对象分析与设计(UML 2.0版) 简介:本书详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。 本书使用最常见的技术和方法,通过一个贯穿全书的...

    面向对象分析与设计.pdf

    由于提供的文件内容不包含实际的文本信息,而是重复的URL链接,因此无法从该部分提供有关面向对象分析与设计(OOAD)的知识点。但是,我将尽可能详细地介绍面向对象分析与设计的相关知识点,以满足您的需求。 面向...

Global site tag (gtag.js) - Google Analytics