Java语言是一门面向对象的编程语言,与面向过程的编程语言(例如C语言)最大的不同就是把构成问题的事物分解为各个对象,建立对象的目的并不是描述某一个过程,而是为了描述某个事物在解决问题的过程中的状态和行为。

一个个对象就是Java程序的组成单元。但是,去管理和标记如此繁多的单元太过于繁琐。譬如,如果需要统计家中厨房内的各种器具,有白釉瓷碗、蓝釉瓷碗、青釉瓷碗、白釉瓷碗、白釉瓷碗、青釉瓷碗、搪瓷碗······。除了碗,还有其它例如勺子、筷子、杯子和碟子,如果所有器具都像先前这种统计方法,那将会十分的复杂。所以,需要对此进行简化。

在引言提到的问题中,如何进行简化呢?我们可以采用这种方法:将具有某些共同特征的器具归到一类。例如,无论是白釉瓷碗、青釉瓷碗、蓝釉瓷碗抑或是搪瓷碗,他们都具有相同的特征(用处是盛放食品或水等、具有大容量的形状结构以及用某种材料制成,参与盛水或盛食物等事件·······)。我们将具有类似这样相同的属性(如用处、制作材料、形状)和方法(盛水、盛食物)的个体归纳成为一个类,在此例中归为一个类——“碗”。

因此,== 类的 定义为:具有相同的属性以及方法的事物的抽象集合(抽象是因为类只关心事物具有哪些属性和方法而不再去关注具体的属性值与方法具体实现过程)。==

对象

在此次的厨房事件中,我们通过抽象归纳创造碗这个类来简化了统计操作,但是又出现了新的问题——需要使用具体的碗的时候该怎么办?例如做饭盛汤用的碗在很多时候与盛饭的碗是不一样的。如果你老妈说今天每人吃一碗饭结果给每一个人发了一个容量两升的盛汤的碗,结果将不堪设想!所以,在使用的具体场合我们需要对“碗”进行具体化的一个操作(容量是多少,颜色是什么颜色,材料是什么,功能(使用方法)是怎样)。在各个属性值与方法的具体功能确定后,我们就完成了”碗“的具体化,得到了一个具体的碗,我们假设它叫做"饭碗"。这个”饭碗“就是”碗“类的一个对象。

因此,对象就是类进行具体化、个性化(将属性赋予个性化的值)得到的结果

public class Bowl {

    private String shape;       //碗的形状
    private String material;    //碗的原材料
    private String capacity;    //碗的容量

    public Bowl(String shape, String material, String capacity) {
        /**
         * 构造函数:创建一个具体的“碗”对象
         * 创建新对象时传入具体的属性值
         */
        this.shape = shape;
        this.material = material;
        this.capacity = capacity;
    }

    private void chengShui() {
        System.out.println("此碗盛水");
    }

    public static void main(String args[]) {
        Bowl bowl = new Bowl("圆形","陶瓷","1L");//创建一个新碗bowl
        bowl.chengShui();//bowl盛水
    }
}