首先先讲一下关于面向对象和面向过程编程的区别和用法:
面向过程:
放衣服(方法)-->加洗衣粉(方法)--> 加水(方法)--> 漂洗(方法)--> 清洗(方法)--> 甩干(方法)
面向对象:
new 出两个对象 ”人“ 和 ”洗衣机“
”人“ 加入属性和方法:放衣服(方法)、加洗衣粉(方法)、加水(方法)
”洗衣机“ 加入属性和方法:漂洗(方法)、清洗(方法)、甩干(方法)
然后执行:
人.放衣服(方法)-> 人.加洗衣粉(方法)-> 人.加水(方法)-> 洗衣机.漂洗(方法)-> 洗衣机.清洗(方法)-> 洗衣机.甩干(方法)
通过上面两个例子,你可以清晰的看见面向对象和面向过程有什么不同,针对于面向对象,不需要考虑其他,只需要考虑完成这个目的的步骤,简单粗暴,适合处理一些简单的线程,如果事情复杂了,那么面向过程是很难维护的,耦合性太高了,而面向对象,它可以把事务,抽象成对应的几个对象,然后每个对象内都有自己的实现方法和字段,当我们要完成这个事务时,只需要创建一个主函数,分别调用这些对象的方法就可以达成我们事务的目的了,这样的做法看起来复杂了很多,但是针对于一些复杂的事物时,面向对象的可维护性高,因为它是把一个事务抽象成独立的对象使用的,耦合性低,改了一个对象的方法也不会影响到其他对象。
封装(Encapsulation):
封装是指将数据(变量)和操作数据的方法绑定在一起,形成一个独立的单元(即类),并尽可能隐藏类的内部实现细节,只暴露必要的接口给外部使用,我们常说的接口接口,就是在封装里实现的方法给了一个public属性让别人通过这个方法传参进来嘛。这样可以保护数据不被外部直接修改,提高代码的安全性和可维护性。
继承(Inheritance):
我个人感觉继承和抽象是结合在一起的,假设我有很多个图形,都需要有画这个方法,那么我完全可以定义一个抽象类中的抽象方法,这样我无论是什么图像我都可以继承这个抽象类,实现里面的抽象方法,从而实现了代码的复用率,而继承是面向对象编程的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。这样可以实现代码的重用,减少代码的冗余。Java只支持单继承,即一个类只能有一个直接父类,但一个类可以实现多个接口。
抽象(Abstraction):
抽象的核心思想是将多个对象共有的属性、行为或功能提取出来,抽象是指隐藏复杂的实现细节,只向外界暴露简单的接口。在Java中,抽象可以通过抽象类和接口来实现。抽象类是不能实例化的类,它可以包含抽象方法(只有声明没有实现的方法)和具体方法;接口是抽象类的更纯粹形式,它只包含抽象方法和静态常量。
多态(Polymorphism):
多态是指同一个行为具有多个不同表现形式或形态的能力。在Java中,多态主要体现在方法的重载(Overloading)和重写(Overriding)上。重载是指在同一个类中,允许存在多个同名方法,但它们的参数列表不同;重写是指子类对父类允许访问的方法进行重新编写,方法名、参数列表和返回类型必须相同。
关于多态可以看一下这篇文章: