面向对象可以解释下吗?都有哪些特性?
面对对象是一种思想,可以将复杂问题简单化。面对对象具有三大特性:封装、继承、多态
- 封装:将事物的属性封装成一个类,可以减少耦合,隐藏细节,内部修改不会影响外部调用
- 继承:从已知类中派生出另一个新的类,新的类拥有父类的非private属性和方法,并且可以通过覆盖和重载来增强方法
- 多态:多态是指一个程序中存在多个同名的不同方法,这些方法除了方法名相同外,参数列表的个数、类型或顺序不同。
关于封装
将类的属性私有化,只能通过公共的get/set方法才能进行访问,通过get/set方法可以将内部逻辑进行封装处理,外部调用不用担心内部逻辑的处理。
关于继承
Java中不支持多继承,只支持单继承。当类的构造函数被private修饰时,是不明确的构造函数,该类不能被继承
继承关系的两个类的初始化顺序
- 初始化父类的静态成员变量和静态代码块
- 初始化子类的静态成员变量和静态代码块
- 初始化父类的普通成员变量和代码块
- 初始化父类的构造方法
- 初始化子类的普通成员变量和代码块
- 初始化子类的构造方法
子类具有的特点
- 拥有父类的非private属性和方法
- 可以通过添加自己的属性和方法,对父类进行扩展
- 可以通过覆盖和重载父类的方法,对父类进行扩展
关于多态
多态的实现方式
-
子类对父类方法的覆盖
-
同一个类中对方法的重载
-
通过将子类对象作为父类对象使用来实现
如:Person stu = new Student();
左侧为类型声明,右侧为类型实现
实现了接口时也可以这样使用
如:LoginService service = new LoginServiceImpl();
关于覆盖(@Override)
覆盖又名重写,指子类与父类之间的一种关系,子类继承父类后,可以重新实现父类已有的非private方法
返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中就不是重写。
关于重载
重载是指在一个类中存在多个同名的不同方法,这些方法的参数个数,顺序以及类型不同均可以构成方法的重载。如果仅仅是修饰符、返回值、抛出的异常不同,那么这是2个相同的方法