面向对象可以解释下吗?都有哪些特性?

面对对象是一种思想,可以将复杂问题简单化。面对对象具有三大特性:封装、继承、多态

  • 封装:将事物的属性封装成一个类,可以减少耦合,隐藏细节,内部修改不会影响外部调用
  • 继承:从已知类中派生出另一个新的类,新的类拥有父类的非private属性和方法,并且可以通过覆盖和重载来增强方法
  • 多态:多态是指一个程序中存在多个同名的不同方法,这些方法除了方法名相同外,参数列表的个数、类型或顺序不同。

关于封装

将类的属性私有化,只能通过公共的get/set方法才能进行访问,通过get/set方法可以将内部逻辑进行封装处理,外部调用不用担心内部逻辑的处理。

关于继承

Java中不支持多继承,只支持单继承。当类的构造函数被private修饰时,是不明确的构造函数,该类不能被继承

继承关系的两个类的初始化顺序

  • 初始化父类的静态成员变量和静态代码块
  • 初始化子类的静态成员变量和静态代码块
  • 初始化父类的普通成员变量和代码块
  • 初始化父类的构造方法
  • 初始化子类的普通成员变量和代码块
  • 初始化子类的构造方法

子类具有的特点

  • 拥有父类的非private属性和方法
  • 可以通过添加自己的属性和方法,对父类进行扩展
  • 可以通过覆盖和重载父类的方法,对父类进行扩展

关于多态

多态的实现方式

  • 子类对父类方法的覆盖

  • 同一个类中对方法的重载

  • 通过将子类对象作为父类对象使用来实现

    如:Person stu = new Student();

    左侧为类型声明,右侧为类型实现

    实现了接口时也可以这样使用

    如:LoginService service = new LoginServiceImpl();

关于覆盖(@Override)

覆盖又名重写,指子类与父类之间的一种关系,子类继承父类后,可以重新实现父类已有的非private方法

返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中就不是重写。

关于重载

重载是指在一个类中存在多个同名的不同方法,这些方法的参数个数,顺序以及类型不同均可以构成方法的重载。如果仅仅是修饰符、返回值、抛出的异常不同,那么这是2个相同的方法