面向对象
面向对象的解释
面向对象是一种思想,时间万物都可以看作是一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发、基于类和面向对象的计算机编程语言。面向对象软件开发有以下优点:
-
代码开发模块化,更易维护和修改
-
代码复用性强
-
增强代码的可靠性和灵活性
-
增加代码的可读性
面向对象和面向过程的区别
面向过程
- 优点:性能比面向对象要高,因为类调用时需要实例化,开销较大,比较消耗资源。比如,单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
- 缺点:没有面向对象易维护、易复用、易扩展。
面向对象
- 优点:易维护、易复用、易扩展。由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活,更加易于维护。
- 缺点:性能比面向过程低。
面向对象的特征
封装
封装,用private修饰符将不想被外界访问的属性和方法隐藏起来。
给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变内部的数据。再Java中,有4种修饰符:public
、protected
、default
、private
。每一种修饰符给其他的位于同一个包或不同包下面的对象赋予了不同的访问权限。
封装的优点:
- 对开发者来说,让数据更加安全保密;
- 对使用者来说,让使用者将精力集中在核心逻辑上。
继承
继承,用extends关键字建立两个类之间 is a 的关系。继承是代码重用最简单的方式之一。
给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用性,也可以在不修改类的情况下给现存的类添加新特性。子类是父类的扩展,能提供比父类更强大的功能。
多态
多态,是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型的操作,可以应用到其他类型的值上面。
父类类型 对象名字 = new 子类对象();
编译看左边 运行看右边
编译器看等号左侧的类型来理解一个对象,编译能够通过取决于左侧的类型
而当真正运行的时候 对象是客观存在的,创建的是什么类型的对象 将会执行什么类的方法
抽象
抽象,是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java支持创建只暴露接口而不包含方法实现的抽象的类。这种抽象的技术的主要目的是把类的行为和实现细节分离。
补充:重载和重写
-
重载(overload)
方法名必须一致,参数必须不一致,比如参数个数不同、参数顺序不同、参数类型不同。
重载的作用:使方法更强大,使用范围更广。
举例:
System.out.println(true);
System.out.println(10086);
System.out.println(3.1415);
System.out.println("重载");
-
重写(override)
要求发生在有继承关系的两个类之间,且一定发生在子类当中。
子类继承了父类的方法后觉得low,于是重新实现了方法,使方法变得更加优秀。更优秀的方法应该得到更广泛的使用,于是访问控制权限修饰符不能更小;更优秀的方法应该有更少的缺陷,于是抛出的异常范围不能更大。
从JDK5.0开始,方法重写支持协变返回类型,即子类的方法返回值类型可以是父类方法返回值类型的子类型。比如父类返回值类型为水果类,子类返回值类型可以为苹果类或香蕉类。