1. 三大基本特征
01:封装 封装是面向对象里面最简单的也是最好理解的。通俗一点来讲的话,就是定义了一个类,类里面的方法是私有的,不能够被外界访问,防止其他程序来做更改。一般来说使用private来修饰。封装对数据提供了有效的保护。
02:继承 要记住java中只能单继承,如果要用多个请用实现。继承有子类和父类的概念,被继承的称为父类或者超类,继承的称为子类。继承其实就是对父类的一些属性或者方法进行动态扩展而又不改变父类的基本行为。要记住使用继承一定要注意是 is-a的关系,也就是子类必须要是父类的一个属性,没有关系的不建议用继承。
03:多态 即“一个接口,多个方法”。多态性体现在父类中定义的属性和方法被子类继承后,可以具有不同的属性或表现方式。多态性允许一个接口被多个同类使用,弥补了单继承的不足。说白了,就是为了接口重用,为了弥补单继承的缺点。
总结:封装可以隐藏实现细节,使代码变得安全与模块化;继承可以扩展已存在的代码模块(类),多态可以实现多个方法,也就是为了实现接口重用,继承是为了实现代码复用。这就是面向对象的好处。
2. 五大基本原则
01:单一职责原则(Single-Resposibility Principle)
核心思想为:一个类只做一件事,只有一个地方能引起他的变化。
例如:比如有一个学生类,里面包含了老师,校长,教导主任。假如有一天教导主任需求有变化,会影响到学生类,校长需求有变化也会影响到学生类,这不符合我们单一职责原则,我们一个类应该只有一个地方能改变这个类的属性或方法。
02:开放封闭原则(Open-Closed principle)
核心思想为:对扩展开放,对修改封闭。
例如:我们要对模块属性进行扩展的时候,可以使用继承或者多态,不要对源码进行修改,所有的扩展都在子类上面去做,可以保证父类的唯一性和不可修改性。
Liskov替换原则(Liskov-Substituion Principle)
核心思想为:子类可以替换父类,子类通过实现了父类的方法,针对于不同需求可以进行动态扩展。
例如: 我们在进行面向接口编程的时候,需要使用到父类。但是,我们如果直接用这个父类的话,可能不同接口之间的需求不一样,对父类进行更改,就影响到其他实现这个父类的方法,也不符合开闭原则。所以,里式替换原则就是说,我们可以使用到公共父类方法的时候,不要去改父类的方法,通过实现父类方法去进行动态扩展自己的业务。
依赖倒置原则(Dependecy-Inversion Principle)
核心思想为:让高层模块不要依赖低层模块!
例如:比如每个类尽量继承自接口,或抽象类,这里面就说的比较泛化,也就是说你可以通过implements,实现接口,通过一个extends继承一个抽象类,或者继承抽象类继承接口,这个只是说尽量,尽量避免具体的类派生,尽量覆盖其方法,可以减少类间的耦合性,提高系统的稳定性,提高代码的可读性,和可维护性,并且最重要的。
接口隔离原则(Interface-Segregation Principle)
核心思想为:使用多个专门一对一接口,比使用单个接口要好用得多。
例如: 我们在写接口的时候,里面写了N多个方法,当我们在程序中需要用到这个接口里面一个方法的时候,实现这个接口里面的所有方法,程序臃肿且不好维护,在公共接口方法的书写过程中,尽量保证接口中的方法小而美,这样利于维护。