Java——面向对象概述

1 总体说明

类和对象 
抽象 
封装 
继承 
多态 
总结

2 类和对象

Java是面向对象(Object Oriented )的程序设计语言,相比传统的面向过程语言,在合理使用面向对象进行设计,分析和编程实现的程序会更易维护和扩展,因为现代企业开发的需求总是在不断变更。

JavaSE是Java的标准版,主要用来开发后台数据处理程序,而一个完整的后台程序可能还需要使用到其他组件或者框架。我做的CDM系统的算法系统主要是采用JavaSE+开源框架Spring+MyBatis以及消息通讯中间件。无论开源框架或者是其他组件多么复杂,底层都是Java基础的内容,当然如果是设计到Java的底层实现,有些事情就是Java语言做不了的了,例如JVM就不是Java语言实现的,而是C/C++语言,每种编程语言都不是万能的,发挥自己的长处也能站上人生巅峰,目前Java的市场份额是第一位。

类是组成Java程序的最小单元,类中可以包含五种成员,分别是属性,方法,构造器,代码块以及静态代码块组成,它们都各司其职: 
属性(Field):也被称为成员变量,不管叫啥都行,它的主要作用是存储对象或者类的数据,类型可以是前面介绍的8种基本数据类型以及一切引用类型。 
方法(Filed):就是需要对传递的数据进行加工处理的过程 
构造器(Constructor):主要功能是创建类的实例,完成对象的初始化操作,之后会提到对象的初始化过程。 
静态代码块:主要是完成类的初始化操作 
代码块:完成创建对象之前的初始化操作

对象是类的实例,一般对象的创建都是通过构造器来创建获取该类的实例,然后通过对象的引用来调用该类中定义的属性和方法。当然产生类的对象不止构造器一种方法,还可以通过Java的反射功能,以后再细说吧。

软件开发中的绝大部分基础工作都是在定义类,类中定义属性和需要完成的功能,也就是方法了。如果该类需要完成某些其他组合引用对象的初始化操作通常都会采用构造器或者静态代码块来实现。功力深厚的Javaer可能会善用设计模式和一些高性能的算法实现使程序更加健壮以及高效。

理论有点多,不过说的都是面向对象的最基本思想,下面继续。

3 抽象

抽象本来就有点抽象,Java中的抽象类和接口都阐明了抽象的本质,让子类实现父类的抽象方法,完成在父类相同方法的不同实现,这似乎很符合人的思维方式,因为熟话说”条条大路通罗马”,通往成功的路不可能只有一条,只是大家的实现方式不同而已。

在早期的JDK API设计中大量使用了抽象类,例如Java的IO处理,位于java.io包中的InputStream,OutputStream以及位于java.util包中的日期处理(Calendar类),位于java.text包中的格式化(Format类)等等。 
抽象类(Abstract Class)最典型的使用就是模板(Template Method)方法模式了,在抽象父类中定义一个模板方法,该模板方法中调用声明的抽象方法,然后让子类们去实现抽象父类的抽象方法,调用父类的模板方法来完成对应的功能。

在位于java.util包中的集合框架(Collection Framework)和位于java.util.concurrent的多线程并发处理(Concurrency)就广泛采用了接口的声明和实现类的设计。 
现在也都是倡导的面向接口编程 
接口(Interface)只是包含了方法的声明,让实现类去实现接口中的方法,这样就可以实现程序的解耦合。 
策略模式是接口的典型用例:在接口(IStrategy )中定义抽象的策略方法(operator()),然后在实现类中实现接口的抽象策略方法,然后由环境对象(Context)去组合抽象策略方法的接口(IStrategy )对象,并调用定义的抽象方法。

Java抽象类和接口的相同以及不同之处 
相同:两者都实现了设计与实现的分离,意味着就不能使用构造器来获取抽象类或者是接口的对象了。 
关注不同点:抽象类和普通类的不同之处在于不能实例化和可以定义抽象方法,换句话说抽象方法必须是定义在抽象类或者是接口中,除此之外好像和普通类没啥不同的了,可以定义之前介绍的五种类成员。 
接口相对于抽象类而言,不能定义普通方法和成员变量,只能是包含方法的声明以及public static final 修饰符修饰的成员变量,JDK8.0中的接口可以定义默认方法,可以去阅读java.util包中的Collection类,该类中就定义了默认方法,可以被实现类ArrayList,LinkedList等创建对象调用,除此之外还能在接口中定义静态方法(直接由类名.方法名调用)

4 封装

封装(Encapsulation)的本质是隐藏内部实现细节,提供给外部调用的接口。 
类的成员变量是存储数据的,在Java企业级开发时因为业务的需要常会使用封装的手段将数据库的对象(DO)通过封装转换成业务对象(BO),因为数据通常都是存储于数据库的表中,而字段的类型大多都是字符串(vchar),而映射到Java中通常需要封装到数据结构中,比较常用的数据结构实现类有HashMap和ArrayList。

在成员变量中通常都是使用私有化属性,提供公共的访问方法(get set)来实现成员变量的封装,这样在访问时可以做验证,确保数据的安全和准确性,因为程序的运行期间,不会像意料之中的那么顺利。

方法的封装主要是对数据的加工处理过程,以及对相同业务处理流程的抽取,减少代码的冗余以及提高程序的可阅读性,Apache Commons项目的commons-lang3包中封装了一些开发中常用的方法,可以仿照着自己编写一些和项目业务相关的工具方法。

内部类也是Java实现封装的一种手段,以后再细说。

5 继承

继承(Inheritance)是指子类继承自父类后就具有父类的成员,像之前谈论到的属性,方法,构造器等等,不过有过前提条件,非私有的(private)。 
这样好像父类完全刺裸裸的暴露在子类面前了,通过继承可以提高代码的复用性,也就可以理解成子承父业。 
而Java只能够支持单继承,也即是子类只能够继承一个直接父类,而Java中所有的类都直接或间接继承自java.lang包的父类,可以通过多实现接口来扩展类的功能。

而当子类继承自父类后还不能完成项目的需求时,就需要考虑借助别个的力量了,这里就是如果A类中声明了B类的引用,就可以通过引用调用B类的成员了。这种方式称之为组合。在JavaWeb开发时,通常都是Service层组合持有Dao层的引用,然后借助Dao层的引用完成访问数据库的操作。

6 多态

多态(Polymorphism )意味着不同的形式,是在之间讨论的抽象(数据)和继承(父子类)基础之上的特性,它是一个运行期(Runtime)的行为,在运行时通过动态方法调用实现的。 
方法的重写(Override)和方法的重载(Overload)是多态的两种表象形式 
方法重写是父类和子类之间的多态性表现,当子类重写父类同名的方法时,就覆盖了父类的特性,而当父类的引用指向之类的对象时调用父类的方法,此时会执行子类的方法,多态就发生了。 
方法重载是当前类的多态性表现,当一个同名的方法,返回值忽略不计,参数列表不同(主要是参数的顺序和个数以及数据类型不同),则调用时会根据传递的对应参数来执行对应的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值