Java教程
  • Introduction
  • Getting Started
    • The Java Technology Phenomenon
      • About the Java Technology
      • What Can Java Technology Do?
      • How Will Java Technology Change My Life?
    • The Hello World Application
    • A Closer Look at the Hello World Application
  • Learning the Java Language
    • Object-Oriented Programming Concepts
      • What Is an Object?
      • What Is a Class?
      • What Is Inheritance?
      • What Is an Interface?
      • What Is a package?
    • Language Basics
      • Java Language Keywords
    • Annotations
      • Annotations Basics
      • Declaring an Annotation Type
      • Predefined Annotation Types
      • Repeating Annotations
      • Type Annotations and Pluggable Type Systems
    • Generics
      • Why Use Generics?
      • Generic Types
        • Raw Types
      • Generic Methods
      • Bounded Type Parameters
        • Generic Methods and Bounded Type Parameters
      • Generics, Inheritance, and Subtypes
      • Type Inference
      • Wildcards
        • Upper Bounded Wildcards
        • Unbounded Wildcards
        • Lower Bounded Wildcards
        • Wildcards and Subtyping
        • Wildcard Capture and Helper Methods
        • Guidelines for Wildcard Use
      • Type Erasure
        • Erasure of Generic Types
        • Erasure of Generic Methods
        • Effects of Type Erasure and Bridge Methods
        • Non-Reifiable Types
      • Restrictions on Generics
Powered by GitBook
On this page

Was this helpful?

  1. Learning the Java Language
  2. Object-Oriented Programming Concepts

What Is an Object?

PreviousObject-Oriented Programming ConceptsNextWhat Is a Class?

Last updated 5 years ago

Was this helpful?

对象是相关状态和行为的软件捆绑。软件对象经常被用作现实世界你能找到的日常物品做建模。这里我们介绍如何用在对象表示中状态和行为,介绍数据封装的概念并解释这样设计软件的好处

什么是对象(Object)

对象是理解面向对象(object-oriented)技术的关键。环顾四周你就能在现实世界中找到很多对象:你的狗,桌子,电视机,自行车等。

现实世界的对象都有两个特征:状态(state)和行为(behavior)。狗的状态有:名字,颜色,品种,饥饿。狗的行为有:叫,取东西,摇尾巴。自行车的状态有:当前档位,当前脚踏节奏,当前速度,自行车的行为有:切换档位,改变脚踏节奏,刹车。分辨现实世界对象的状态和行为是思考面向对象编程的好办法。

现在花一点时间观察附近的现实世界的对象。每看到一个对象就问自己两个问题"这个对象有哪些状态"和"这个队形有哪些行为",并记下你的观察。现在你会发现现实世界的对象是复杂的,你的台灯可能有两个状态(开和关)和两种行为(打开和关闭),但是你的收音机有额外的状态(开,关,音量,电台)和以下的行为(打开,关闭,增加音量,减少音量,寻找,扫描和切换电台)。你可能发现有些对象最终会包含其他对象。对现实世界的观察多会被转化为面向对象编程的世界。

A software object.

软件对象在概念上和现实世界的对象很像:他们都包含状态和行为。对象中保存状态的被称为fields(有的编程语言称之为variables)并使用methods(有些编程语言称之为functions)来表示行为。使用函数操作对象中的状态是对象之间沟通的基本机制。隐藏内在状态而使用对象的函数进行交互的方式被称为data encapsulation(数据封装)——这是面向对象的基本原则。我们以自行车为例:

通过状态(当前速度,当前脚踏节奏,当前档位)并提供改变状态的函数,对象控制着外部世界如何使用它。比如,现在自行车一共6档,改变档位函数可以拒绝任何小于1或者大于6的数字。

将代码和单个软件对象进行捆绑会带来以下好处:

  1. 模块化:一个对象源代码的编写与修改独立于其他对象的源代码。一旦被创建,对象可以在系统内部方便的传递

  2. 信息隐藏:只通过对象的函数进行交互,外部世界并不了解内部的实现细节

  3. 代码复用:如果对象已经存在(可能是其他开发者编写的),你可以可以在自己的程序中使用。这就允许专家实现/测试/调试复杂的,特定与任务的对象,你可以信任这些对象并在你的代码运行。

  4. 可插拔性和调试简便性:如果某个对象运行出现问题,你可以简单的删除它人后引入另外的可以代替他的对象。这和现实世界中修复机械故障相类似。如果一个插销坏了,你可以替换台而不需要更换整台机器。

A bicycle modeled as a software object.