封装
封装是指把客观事物抽象成类,类可以把数据和方法只和信任的类或对象操作,对于不可信的类或对象隐藏信息。
比如说定义一个矩形类
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实例,直接使用。
















