`
XiangdongLee
  • 浏览: 87250 次
  • 性别: 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  
啦啦啦 博主好腻害奥

相关推荐

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

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

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

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

    Python 3面向对象编程

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

    面向对象分析与设计

    《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的...

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

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

    java面向对象编程源码

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

    面向对象软件工程

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

    漫画面向对象编程 Java

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

    面向对象分析与设计1

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

    面向对象 面向对象 面向对象

    面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢...

    面向对象葵花宝典 思想、技巧与实践

    本书系统地讲述了面向对象技术的相关内容,包括面向对象的基本概念、面向对象开发的流程、面向对象的各种技巧,以及如何应用面向对象思想进行架构设计。在讲述相关知识或技术的时候,除了从“是什么”这个角度进行...

    上海交大Java面向对象程序设计视频教程(全31集)

    资源名称:上海交大Java面向对象程序设计视频教程(全31集)资源目录:【】[上海交大][面向对象技术java]上(01-05集)【】[上海交大][面向对象技术java]上(06-10集)【】[上海交大][面向对象技术java]下(21-25集)【】...

    软工大作业面向对象分析与设计.doc

    面向对象分析与设计 1.实验目的 根据教师给定的题目或自选题目,利用有关的工具软件和面向对象的分析方法,进行信息系统的分析、设计和建模。 2.实验内容 利用UML和有关的工具软件,进行面向对象的系统建模,包括:...

    《C#面向对象程序设计》源代码(CS)

    本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发,以及数据库访问技术。...

    Python入门教程完整版(懂中文就能学会)资料面向对象讲义1.pdf

    面向对象 面向对象(OOP)基本概念 基本概念 面向对象编程 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 目标 了解 面向对象 面向对象 基本概念 01. 面向对象基本概念 面向对象基本概念 我们之前学习...

    软件工程 期末大作业参考 【餐厅点餐系统 】面向对象模型(需求分析+面向对象设计书+可行性分析+测试文档+java界面)

    本文主要为计算机类专业课“软件工程”结课大作业参考资料,主要围绕餐厅的自助点餐系统进行一系列的研究,采用面向对象模型进行开发,完整资源包括需求分析、面向对象设计书、可行性分析、测试文档和使用java初步...

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

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

    写给大家看的面向对象编程书(第3版).pdf

    《写给大家看的面向对象编程书(第3版)》是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,《写给大家看的面向对象编程书(第3版)》...

    《Java面向对象编程》电子书+实例源代码+课后题答案.part10

    后续分卷改名为《Java面向对象编程相关资源》大家下载后要记得把压缩包改回原来的名字以便解压(如:Java面向对象编程相关资源.part11.rar--->Java面向对象编程书+实例源代码+课后题答案.part11.rar)。

Global site tag (gtag.js) - Google Analytics