面向对象的三大基本特征


封装(Encapsulation)

  所谓封装,也就是把客观事物封装成抽象类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不0可信的进行消息隐藏。

  简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或者某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,已防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

封装举例

如我们想要定义一个矩形,先定义一个Rectangle类,并通过封装的手段放入一些必备数据。

/**
* 矩形
*/
class Rectangle {

     /**
      * 设置矩形的长度和宽度
      */
     public Rectangle(int length, int width) {
         this.length = length;
         this.width = width;
     }
    
     /**
      * 长度
      */
     private int length;
    
     /**
      * 宽度
      */
     private int width;
    
     /**
      * 获得矩形面积
      *
      * @return
      */
     public int area() {
         return this.length * this.width;
     }
}

继承(Inheritance)

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需要新编写原来的类的情况下对这些功能进行扩展。

通用继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。

继续举例

我们想要定义一个正方形,以为已经有了矩形,所以我们可以直接继承Rectangle类,因为正方形是矩形的一种特例。

/**
 * 正方形,继承自矩形
 */
class Square extends Rectangle {

    /**
     * 设置正方形边长
     *
     * @param length
     */
    public Square(int length) {
        super(length, length);
    }
}

多态(Polymorphism)

所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。

这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

最常见的多态就是将子类传入父类参数中,运行时调用父类方法时通过传入的子类决定具体的内部结构或行为。