java关键-------面向对象

序:
无论是在学习还是在写代码时,封装,继承,重载,重写。我们一直在用。前面讲的人也把格式等写的比较明了,我主要讲下我自己对面向对象理解,里面代码,格式等应该没有多少。主要是文字叙述的多,尤其是我私下说都说的明白,但是当着人就会紧张,语无伦次。所以我把自己想说的都写在了ppt里。别怪我照着ppt读 这大部分都是我自己一个字一个字敲的。
Java语言核心-----面向对象
*面向对象乃是Java语言的核心,是程序设计的思想
*什么叫面向对象(我们要使用面向对象 就要先了解面向对象到底是什么东西)毕竟会用 不知道原理我就当做不会来处理。。。
*面向对象与面向过程
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
*什么叫对象:关于对象的理解很简单,在我们的身边,每一种事物的存在都是一种对象。总结为一句话也就是:对象就是事物存在的实体。
比如人类就是一个对象,然而对象是有属性和方法的,也就是世界上没有两片相同的雪花的道理,每个人都是独一无二的,都有自己独特的个体特征和个体行为也就是属性,那么身高,体重,年龄,姓名,性别这些是每个人都有的特征可以概括为属性,当然了我们还会思考,学习,这些行为相当于对象的方法。不过,不同的对象有不同的行为
面向对象的特征 —也就是封装、继承、多态(抽象(查资料看到的))
其一:封装
封装就是把属性私有化,提供公共方法访问私有对象。举个简单的例子,就比如电脑,咱们买一台电脑。我们不需要知道它是怎么制造的,我们只需要知道它能用来玩游戏,上网和聊天就行了。
对于程序设计,用户只需要知道类中某个方法实现了什么样的功能,需要该功能的时候直接去调用就行了,不用去关心方法内部的实现细节。这就是封装。
面向过程和面向对象的区别。举个栗子,下五子棋 。我们学c的时候下五子棋大致流程就是:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。
而面向对象语言就可以整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
是不是初步(zha?)一看,感觉面向对象的既麻烦。逻辑又多看着就恶心。面向过程的条理清晰,不需要啥智商,跟着过程写就行,但是我们仔细思考下。面向过程,相当于使用一次就将棋盘棋子直接扔掉,而面向对象则是下完这盘棋 我们把棋盘棋子留下来,来日再战。
还有可能我们有棋盘棋子。我们修改一下规则 明天不下五子棋了 我们下围棋 。这个差别就很明显了。我们想下围棋 。面向过程的代码就需要从头重写一遍。而面向过程。我们可以将五子棋的项目偷一下。改下规则。就成了另一种游戏 。 (也不是说面向过程不好。(次数比较))
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。
*封装:封装的基本单元是类(class),类是一个抽象的逻辑结构,而类的对象是一个真实的物理实体;类的目的是封装复杂性,在类内部存在隐藏实现复杂性机制
1.模块化:可以独立于其他对象的源代码进行编写和维护,可以很容易的将对象在系统中传递;
2.隐藏信息:其他对象可以通过本对象的一个公共接口进行通信而不影响其他对象;
*类:具有同种属性的对象称为类,是个抽象的概念。
比如下棋项目实际上就分为三类,(切回去看一下。。)在这个项目里面 我们如果不想下五子棋了。这个时候就需要对类进行实例化,下棋的人数,两人。棋盘长宽。以及具体规则就是我们需要实例化的成对象的。
*类与对象的关系
所有的事物都可以看做是一个对象,是对象就具有一定的属性和功能,这些对象是可以建立起联系的,而且这些对象是由类来构造的。类是具有属性和方法的一组对象的集合,对象是实际存在的该类事物的个体
在面向对象中,类和对象是最基本和最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象,对象就表示一个个具体的东西,对象是以类模板创建的。
举个简单的栗子:我的电脑,在工厂里首先要由设计师设计出一个电脑图纸,然后再根据图纸去生产电脑,这样生产出来的电脑和功能都是一样的。但是不同的款式有不同的特征,比如外壳的颜色,内部板式,性能等。在这个例子中,设计图纸就是一个类,它规定看电脑应该拥有的基本部件。而根据这张图纸生产出来的每一辆电脑就是一个个实时存在的对象。它们的初始状态是一模一样的,如果其中某一台电脑黏上贴纸,插几条内存并不影响其他的跑车。
*其二 继承
当多个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它类继承这个父类。继承后子类自动拥有了父类的属性和方法,比如猫,狗,熊猫他们共同的特征都是动物,有颜色,会跑,会叫等特征。也可以传递继承,比如猫继承动物类,短毛猫继承猫类,英国短毛猫继承短毛猫类这样的写法
我们可以把这些特征抽象成我一个Animal类(也就是父类)。然而他们也有自己独特的特性,比如猫会抓老鼠,喵喵叫,熊猫有黑眼圈,能吃竹子,狗会汪汪。于是我们就根据这些独特的特征分别抽象出来Cat,Dog,Panda类等。
他们拥有Animal类的一般属性和方法,也拥有自己特有的某些属性和方法。但特别注意的是,父类的私有属性(private)和构造方法不能被继承。
另外子类可以写自己特有的属性和方法,目的 是实现功能的扩展,子类也可以复写父类的方法,即方法的重写。
*构造器:
构造器的作用。实例化对象,给对象赋初始值。构造器的名称必须和类名一致用public修饰,因为构造器的主要作用就是给对象赋初始值,所以公开。一个类中可以定义多个构造器,但是构造器的参数列表必须不同。但是Javabean规范我们一般保证有两个构造器,无参和全参。(栗子栗子)
当父类中没有无参构造器时,子类不会继承父类的构造器。子类的构造器一定需要显示(也就是要写在子类代码中)
调用父类构造器如果子类中提供的属性与父类的属性名称相同,我们可以使用super关键字进行区分。super.父类属性this.本类属性
建议:子类的属性名,尽可能的不要与父类的属性名相同。避免麻烦
*其三 多态
简单来说就是“一种定义,多种实现”。同一类事物表现出多种形态。Java语言中有方法重载和对象多态两种形式的多态
方法重载
在一个类中,允许多个方法使用同一个名字,但是方法的参数不同也就是参数列表,完成的功能也不同
方法重写
父类中私有方法不能被重写,因为父类私有方法子类根本就无法继承,子类重写父类方法时,访问权限不能更低,最好就一致。父类静态方法,子类也必须通过静态方法进行重写
(假装有个栗子(自己现场编吧。))
对象多态:子类对象可以与父类对象进行相互转换,而且根据其使用的子类的不同,完成的功能也不同也就是
(1) 向上转型:子类对象—》父类对象;
(2) 向下转型:父类对象—》子类对象;
对于向上转型,程序会自动完成,
而对于向下转型时,
必须明确的指明要转型的子类类型,

其四:抽象
抽象是从许多事物中,舍弃个表的,非本质的属性,抽取出共同的,本质的属性的过程。例如教师,学生和工人,他们共同的特质是人类,既然是人类就有共同的属性:性别,年龄,身高,体重等。抽象的过程就是比较的过程,通过比较找出事物之间的共同属性,通过比较区分本质。
抽象是建立在封装之上的。抽象是从不同的角度,不同的层次看待问题。层次越高,就越抽象。
抽象的几种级别:
将过程封装成一个方法。方法对外屏蔽了具体的实现和操作。使用者只需要根据方法签名使用即可。使用者眼中是各个不同的方法,无需关心细节。这种级别的抽象,是最低级别的抽象。
将事物封装成类。使用者眼中是各个不同的现成的类,不用关心类具体的实现,将这些类组装调用,即可完成相应的工作。这是高一层的抽象。
将类封装模块或者构件。使用者眼中是一个完整的模块。比如说,日志有log4j。将系统划分成不同的模块。站在这个层次上看问题,只需要将各个模块拼装即可,也无需关心模块具体的实现,也无需关心模块包含哪些类。因为这个层次更高,抽象程度更高。比如说UML中的构件图,这个层次更关心各个构件之间的协作关系。
应用级别的抽象。这是最高层次的抽象。SOA就是一个例子,一个独立的服务,是一个独立的应用。。我们不需要去关心各个应用内部由哪些模块,构件组成,只需要将各个应用拼装来完成不同的任务。通常系统的架构图就是这样,只画出各个具体的服务,关注服务之间的调用关系。一个服务,一个数据库,一个消息队列,一个缓存服务都只是一个圆圈而已。站在这个层次看待问题,会当凌绝顶,一览众山小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值