什么是面向对象?
面向对象是一种思想,他将万物视为为一个个对象,让对象表示万物各自的特征与自身的行为。
面向对象的特点
- 对象具有方法和属性
- 对象具有唯一性
- 一切皆为对象
- 对象是某个类别的实例
- 对象具有变化状态
面向对象三大核心
封装
将类的一些属性或者方法进行隐藏不允许外部直接进行访问,而是通过该类实现方法来进行访问,从而保护数据和更好的方便修改和实现。一般使用标准get/set进行封装
封装的优点
- 减少耦合性
- 减轻维护的负担
- 有效的调节性能
继承extend
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。子类拥有父类的所有属性和方法(除了private修饰的属性不能拥有)从而实现了实现代码的复用,减少代码的重复性
注:一个父类可以有多个子类,一个子类只有一个父类
多态
多态就是对象的多种形态,是指允许不同子类型的对象对同一消息作出不同的响应。
方法的重写与重载来表现对象的多样性
重写
如果子类对父类的方法不满意可以进行重写,使子类对象其中的方法不在继承其父类 的方法而是执行重写后的子类方法。
重写的特点
- 发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
- 子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
- 子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
重载
它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,就会根据不同的参数样式,来选择合适的方法执行
重载的特点
- 在使用重载时只能通过不同的参数样式
- 不能通过访问权限、返回类型、抛出的异常进行重新加载;
- 方法的异常类型和数目不会对重新加载造成影响;
- 在同一类中进行才能进行重载
注:对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
abstract
用于修饰类和方法,表示抽象的。
- 抽象方法只能出现在抽象类中,不能出现在普通类中。
- 抽象类中可以没有抽象方法。
- 抽象类中有构造方法,但该构造方法只会在new抽象类的子类对象时会自动调用,抽象类不能创建自身对象。
- 抽象类通常需要被继承,一旦有子类继承了抽象类,就必须要重写抽象类中的所有抽象方法。
interface
接口用于定义接口的关键字。代替class。功能是把所需成员组合起来,用来封装一定功能的集合或者是把其看成另一种方式的继承。
- 接口是一个完全抽象类,其中的方法都是public abstract修饰的抽象方法,没有方法体,其中的属性都是public final static修饰的静态常量。
- 接口中没有构造方法,不能创建对象。
- 接口通过implements实现,实现它的类称为该接口的实现类。
- 一个类可以同时实现多个接口。
- 一个类实现了接口后,必须重写其中的抽象方法。
- JDK1.8后,可以在接口中定义default方法和static方法,该方法不用重写