封装

封装是指把客观事物抽象成类,类可以把数据和方法只和信任的类或对象操作,对于不可信的类或对象隐藏信息。

比如说定义一个矩形类

class Rectangle{
    public Rectangle(int long,int width){
        this.long= long;
        this.width = width;
    }
    
    /**
    * 长度
    **/
    private int long;

    /**
    * 宽度
    **/
    private int width;

    /**
    * 计算面积
    **/
    public int area(){
        return this.long * this.width;
    }
}

通过封装的方式简陋的定义了一个矩形类,他的参数矩形的长和宽,对现实中的矩形进行了抽象表示。

继承

类可以使用现有类的所有功能,无需编写原来类的情况下拓展更多的功能。

新的类一般被称为“子类”,“派生类”。

比如定义一个正方形类继承矩形类:

class Square extends Rectangle{
    /**
    * 设置正方形的边长
    **/
    public Square(int length){
        super(length,length);
    }
}

利用正方形是特殊的矩形,通过矩形派生出正方形,面向对象就是通过继承关系表现出来。

继承和组合的区别

继承 “is - a”  正方形是矩形

代码在编译期就决定好继承一个确定的类

优点

创建子类对象时,无需创建父类对象

子类自动继承父类的接口

缺点

破坏封装,子类依赖父类的实现,子类缺乏独立性

支持拓展,但是系统的结构会更加的复杂

不支持动态继承,运行子类的时候不可以选择其他父类

子类无法更改父类的接口

组合 “has - a” 矩形有长宽

面向接口,在运行期的时候确定组合关系

优点

不破坏封装,整体类和局部类彼此相对独立

有良好的拓展性

支持动态组合

整体类可以对局部类进行包装,提供新的接口

缺点

整体类不能自动获得局部类的接口

创建整体类的时候也需要创建局部类的对象

 多态

一个类实例的相同方法在不同情况下有不同的表现形式

需要满足三个条件

有类的继承或接口的实现

子类重写父类的方法

父类引用指向子类

使用场景

Spring IOC 对象由spring自己管理Bean实例,直接使用。