面向对象的三大基本特征和五大基本原则

面向对象的三大基本特征和五大基本原则

上一章我们讲到了面向过程和面向对象的特征和区别,那么这一章我们就来介绍一下面向对象的一些特征和开发原则

面向对象的三大基本特征

1、封装(Encapsulation)
所谓的封装,可以理解成把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象进行操作,对不可信的进行信息的隐藏。
封装是面向对象的基本特征之一,是对象和类概念的主要特征。简单的说,一个类就是一个封装了的数据以及操作这些数据的代码的逻辑实体。
特别说明的就是在一个对象的内部,某些代码和数据是可以私有的,不能被外界所访问的到。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关紧要的部分意外的使用了对象的私有部分。(在后面我会讲到权限修饰符,来说明这一点
2、继承(inheritance)
继承指的是一种这样的能力,即:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
就像儿子继承父亲的某些相貌特征等等。通过继承创建的新类称之为“子类”或“派生类”,被继承的类称为“基类”、“父类”或者“超类”。继承的含义过程其实很简单就是从一般到特殊的过程,继承再创新。(长江水后浪推前浪)
继承的概念实现方式有两种:实现继承和接口继承
①、实现继承:直接使用父类的属性和方法而无需额外的编码能力;
②、接口继承:仅仅是使用父类的属性和方法名称,但是子类必须提供实现的能力(代码)
后面我会讲到extends和implements区别,以及继承的规则
3、多态
所谓的多态是指一个类实例的相同方法在不同情形下有多种表现的形式,即一种形式多种表达状态;
多态机制使具有不同内部结构的对象能够共同享有外部接口。(这是我所理解的
那么对于多态其概念为:就是同一操作 作用于不同的对象,可以有不同的解释,产生不同的执行结果 ,那么如果按照这个概念来定义的话,那么多态应该是一种运行期的状态。
那么我们就使用一段代码来解释多态

public class NewClass {
    public static void main(String[] args) {
        //3.父类的引用指向子类的对象
        Parent p = new Son();
        Parent p1 = new Daughter();
        p.call();
        p1.call();
    }
}
class Parent{
public void call(){
    System.out.println("im Parent");;
}
}
// 1.有类继承或者接口实现
class Son extends Parent{
// 2.子类要重写父类的方法
public void call(){
    System.out.println("im Son");
}
}
// 1.有类继承或者接口实现
class Daughter extends Parent{
// 2.子类要重写父类的方法
public void call(){
    System.out.println("im Daughter");
}
}

输出

run:
im Son
im Daughter
成功构建 (总时间: 0)

这样就实现了多态,同样是Parent类的实例,p.call 调用了Son类的实现,p1.call 调用了Daughter类的实现,但是有些时候你用到的对象并不都是自己声明的。这个示例只不过是自己所声明的而已。
这里要强调一点 多态实现的类之间的关系必须是父子关系!!!他们之间必有继承关系。

五大基本原则

1、单一职责原则
其核心的思想就是一个类最优情况下只做一件事,只有一个引起它的变化。
如果你把它理解为是低耦合,高内聚的引申也是没有问题的,试想如果一个类牵扯到多个职责,那么牵一发而动全身,相互之间产生比较多的影响的时候,高耦合、内聚性降低都是程序的问题。
2、开放封闭原则
怎么既开放又封闭?很多人第一眼看到的时候肯定是这么想的,但是对其的释义完全不是这么回事。
软件实体应该是可扩展的,而不可修改的,可以简单的理解为是对扩展开放,对修改是封闭的。
对扩展开放,意味着有新的变化和需求时,可以对现有的代码进行扩展,以适应新的需求;
对修改封闭,意味着类一旦设计完成,就可以完成其独立的完成其工作,而不要对其进行任何尝试的修改。
毕竟需求总是在不停的变化,你也不知道下一秒提出的需求到底是什么。
3、替换原则
子类必须能够替换其父类,可以说是对继承机制的一种约束规范,只有子类能够替换基类时,才能保证在程序运行的时候识别到子类,这是保证继承复用的基础。
4、依赖倒置原则
依赖于抽象。具体的来说就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
5、接口隔离原则
使用多个小的专门的接口,而不要使用一个大的总接口。
具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对
另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染(官方释义)

总结

“你并不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看做警铃,若违背了其中的一条,那么警铃就会响起。” ----- ARTHUR J.RIEL
下期我会对其中的一些知识点进行经典复刻,还原。敬请期待

你可能感兴趣的:(java,封装,多态,继承)