作为面向对象的语言,Java本身的特性支持着它作为面向对象编程语言的作用。Java有三大特性,封装、继承、多态,今天总结一下。
1、类,抽象,对象
抽象,对一类事物的属性和行为进行总结归纳。事物抽象,为类。类是事物的模板,类建立(new)实例,为对象。
类有成员变量和成员函数,成员变量为类的属性,成员函数(方法)为类的行为。成员变量,存储在堆内存中,与创建的对象生命周期一致。通过类的行为可以操作类的属性,完成信息传递和业务操作等。
抽象类,使用abstract关键字,只能用做继承,抽象类可以包含非abstract方法,但是包含抽象方法的一定是抽象类。抽象类的子类,要重写所以抽象方法。
接口,使用interface关键字,只包含抽象方法,允许创建者确定方法名、参数列表和返回类型,但没有方法体。接口需使用implements关键字实现,提高了代码复用性。
内部类,只能通过访问外部类来访问,内部类可以使用外部类的所有属性和方法。
2、方法
方法包括返回类型、方法名、参数。参数类型不同,则方法不同。
构造器方法是一种特殊的方法,是隐式static方法。方法名与类名相同,参数为类的零到多个属性,没有返回值类型。构造器用于创建对象时初始化对象。每个类都有构造器,如果没有显示声明则有默认的无参构造器。
构造器参数的不同,则为不同的构造器,这是方法的重载(overload)。
子类继承父类,会对公有方法(非private)进行重新定义。方法返回类型,方法名称,参数列表都相同,这是方法的重写(override)。
static方法,静态方法,不能调用非静态方法。可以通过类本身直接调用静态方法,不必创建对象。
3、封装
类的属性私有化,只有通过类的公有方法才能访问,是封装的一种形式。封装是为了数据安全,为了程序的高内聚、低耦合。
封装尽可能的隐藏程序的内部属性和业务实现细节,提供公有的方法给外部,将接口与实现分离,便于重用,也是一种程序的模块化体现。
4、继承
extends,单继承,多重继承;interface,接口,多种实现,弥补单继承的缺点。
继承,子类继承父类的所有属性和方法,构造方法除外。
方法的覆盖(override,重写),只发生在子类里(不是子类不存在重写)。子类重写的方法的访问控制权限不低于父类,抛出的异常不多于父类。重写可以自己完善方法里的业务逻辑和数据的处理。
5、多态
方法的重写(子类继承父类)、重载(一个类里面参数类型不同)与动态连接构成Java的多态性。
绑定:将一个方法调用同一个方法的主题关联起来,称为绑定。简单理解,给方法找到使用者(对象),关联在一起。
动态绑定:也称后期绑定、运行时绑定,在运行时根据对象的类型进行绑定。Java采用的是后期绑定,除了static和final方法外,其他所有的方法都是动态绑定的,是自动发生的。
对象多态性主要是指子类和父类对象的相互转换关系。
a) 向上类型转换(upcast):将子类型转换为父类型,将子类对象的引用给父类。对于向上类型转换,不需要显式指定。
b) 向下类型转换(downcast):将父类型转换为子类型,将父类对象的引用给子类。对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。
构造器调用顺序:1)父类构造器;2)按声明顺序调用成员的初始化方法;3)子类构造器
注:部分摘自《Thinking in Java》。