[Java] 入门(03)

  这一章可以说是 Java 的重中之重,没错众所周知,Java 是 面向对象 编程,这一章讲的就是 对象与 类。

  

  1、概述:

        A、面向对象程序设计,简称(OOP),Java 是完全面向对象的,必须熟悉 OOP 才能够编写 Java 程序。

      B、面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。

      C、程序中的很多对象来自标准库,还有一些事自定义的。

      D、只要对象能够满足要求,不必关心其功能的具体实现过程。

      E、在面向过程的程序中,算法是放在第一位,而数据结构是放在第二位;OOP 把这个次序调转,把数据放在第一位,算法/操作数据的算法放在后面。

    


  

  2、类:

    A、类(class)是构造对象的模板 或 蓝图。

     B、由 类 构造(construct)对象的过程称为创建类的实例(instance)。

       C、OOP 的原则,让用户自定Java 的类,变得更加容易,就是:可以通过扩展一个类来建立另一个新的类。

     D、在 Java 中,所有的类都源自一个 "神通广大的超类" Object。

     E、在扩展一个已有的类时,这个扩展后的新类具有所扩展的类的全部属性和方法。

       F、通过扩展一个类来建立另一个类的过程叫 继承(inheritance)。

     G、类之间的关系:  

类之间的关系
关系 描述
依赖("uses-a")

A、依赖(dependence),即 "uses-a" 关系,是一种最明显的、最常见的关系。

B、如果一个 类/A 的方法操作另一个 类/B 的对象,我们可以说这个 类/A 依赖 另一个 类/B。

C、将相互依赖的类减至最少,可以减少一些因为修改类而导致的Bug 出现,这就是所谓的耦合度最小。

D、上面 C 的说法,就是减少相互依赖的类,其实就是低耦合的说法。

聚合("has-a")

A、聚合(aggregation),即 "has-a" 关系。

B、聚合意味着 类A 的对象,包含着一些 类B 的对象

C、在 Java 的核心技术中,作者建议我们用聚合这个词,而不是用关联。

继承("is-a")

A、继承(inheritance),即 "is-a" 关系。

 

 


 

  

  3、对象:

    A、要使用 OOP, 一定要清楚对象的三个主要特性:  

          * 对象的行为(behavior)—— 可以对对象施加哪些操作,或者可以对对象施加哪些方法。

          * 对象的状态(state)—— 当施加哪些方法时,对象如何响应

          *   对象标识 (identity)—— 如何辨别具有相同行为与状态的不同对象

        B、对象的状态必须通过调用方法实现(如果不经过方法调用就可以改变状态,只能说明封装性遭到破坏)。

      C、要想使用对象,就必须先构建对象,并指定初始状态;然后再对对象应用方法。

      D、在 Java 中,是使用 构造器(constructor)构造新的实例;构造器是一种特殊的方法,用来构造并初始化对象。

      E、想要构造一个对象,需要在构造器前面 加上 new 操作符:

/// 例如下面的 Date 类,我们要构造一个 Date 对象
/// Date 就是构造器。
/// 构造器的名称 要跟类名一样。
Date dateObj = new Date();

/// JavaScript:
class 类名 {
///  constructor 是构造函数
   constructor() { }
}


/// 这里可以说明 构造器 和 构造函数,不是一个东西。应该是这样没错。
/// 可能是相同,区分一下叫法先。

 

      F、对象和对象变量之间 存在一个重要的区别,对象变量,它是未引用对象,只声明了的变量。不能使用类的方法。

      G、Java 中的对象变量,可以理解成 C++ 中的指针,大概意思就是,编程语言在 内存中 创建好一个对象,放在那里,然后变量名只是指向这一块内存的地址。

      H、所以 为什么上一章的 数组赋值 是浅拷贝。

      I、在 Java 中,最简单的类定义形式为:  

class ClassName 
{    
    field 1
    field 2
    ...
    
    /// 其中 constroctor 是 Java 中,类的构造函数,
    ///  这里不是有多个构造函数,而是一个方法重载的概念,我在下一章会说。
    constructor1
    constructor2
    ...
    
    method1
    method2
    ...                        
}

 

上一篇:06_JAVA OOP


下一篇:什么是面向对象编程OOP