面向对象是一种思想,可以讲复杂问题简单化,让我们从执行者变为了指挥者。面向对象的三大特性为:封装,继承与多态。
封装:将事物封装成一个类,减少耦合,隐藏细节。 保留特定的接口与外界联系,当接口内部发生改变时,不会影响外部调用方。
继承:从一个已知的类中派生出一个新类,新类可以拥有已知类的行为和属性,并且可以通过覆盖、重写来增强已知类的能力。
多态:多态的本质就是一个程序存在多个同名的不同方法,主要通过三种方式来实现:
通过子类对父类对覆盖来实现
通过在一个类中对方法的重载来实现
通过将子类对象作为父类对象使用来实现
封装:
将类的属性私有化,只有通过公共的get/set方法才能访问,在get/set方法中我们可以对内部逻辑进行封装处理,外部调用方不必关心我们的处理逻辑。
继承:
java中不支持多继承,即一个类只允许有一个父类存在。另外java中的构造函数是不可以继承的,如果构造函数被private修饰,那么就是不明确的构造函数,该类是不可以被其他类继承的
java中类的初始化顺序:
初始化父类中静态成员变量和静态代码块
初始化子类中的静态成员变量和静态代码块
初始化父类中的普通成员变量和代码块,在执行父类的构造方法
初始化子类中的普通成员变量和代码块,在执行子类的构造方法
如果父类构造函数是私有的,则初始化子类的时候不可以被执行,所以解释了为什么该类不可以被继承,也就是说其不允许有子类存在。
子类有哪些特点?
子类拥有父类非private的属性和方法
子类可以添加自己的方法和属性,对父类进行扩展
子类可以重新定义父类的方法,方法的覆盖、重写
覆盖(@Override):
覆盖也叫重写,是指子类和父类之间方法的一种关系,比如说父类拥有方法A,子类扩展了方法A并且添加了丰富的功能。
多态:
通过方法的覆盖和重载可以实现多态。
重载:
重载是指一个类中包括父类存在多个同名的不同方法,这些方法的参数个数,顺序、类型不同均可以构成方法的重载。如果仅仅是修饰符、返回值、抛出的异常不同,那么这是2个相同的方法。
向上转型:
子类对象转为父类,父类可以是接口。
公式:
Father f = new Son();
向下转型:
Son son = (Son)f;
在向上转型的时候我们可以直接转,但是在向下转型的时候我们必须强制类型转换。该父类必须实际指向一个子类对象才可以强制类型向下转换(不知道具体哪个儿子)。