Java面向对象09-特性

在这里插入图片描述

Java语言特点
什么是面向对象

对象是事物存在的实体,如,猪、狗,花早等都是对象,对象由两部分组成。面向对象编程的三大特点:继承,多态,类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。

面向对象思想就是不断的创建对象(属性与行为的封装,让二者作为整体参与程序执行),使用对象,指挥对象做事情。(在已有对象的情况下,直接使用对象,而不再去考虑对象的内部构造)

面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)

面向对象与面向过程比较

面向过程:
面向过程,核心是过程二字。过程即解决问题的步骤,设计一条流水线,机械式的思维方式。它考虑的是实际地实现,针对一个特定的问题去思考其解决步骤。学过C语言的同学就知道,用C语言编程,我们需要去解析题意,分析目的,画出流程图,按着步骤实现。这就是一种面向过程的思考方式。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。因此在模块化编程的时候才会有“低耦合,高内聚”的思想来提高效率。

面向对象:
面向对象离不开面向过程,我们可以把面向过程当做面向对象每一部分的实现。就比如造车,面向对象就是思考车这个对象是由什么组成的,而每一个零件的制作就是一个个过程要经过一道道工序才能做出来。因此,面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。

两种思想的对比
面向对象是具体化的、流程化的。解决一个问题,需要一步一步分析需要怎样,然后需要怎样,一步一步实现的。面向对象是模型化的,抽象出一个类,这是一个封闭的环境,在这个环境中有数据、有解决问题的方法,你如果需要什么功能直接使用就可以了,至于是怎么实现的,你不用知道。

面向对象怎么体现

(1)通过类:类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。

(2)封装:是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想,用户只能通过对外提供的接口访问数据。

(3)多态:是指允许不同类的对象对同一消息做出响应,根据对象创建实例的不同调用不同的方法,本质是编译时和运行时才决定对象的行为。

这里分为两个知识点:静态分派,方法的重载,编译时决定

动态分派,方法重写,运行时决定。

多态的特点:可替换性,灵活性,扩展性,统一编码风格。

(4)继承:继承是指从已有的类中派生新的类,新的类能够吸收已有类的数据属性和行为,并能够扩展新的功能。

特点:可扩展性,代码复用。

封装

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 举个例子,封装就好比是一台电视,厂家把电视的电路板、电线、信号接收器等封装在外壳里,只有相关技术人员才能打开电视机外壳,对其中的东西进行访问,而我们只需要通过开关、遥控器就可以实现电视机的功能。

这也就是程序设计所要求的高内聚、低耦合。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。 通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

封装的实现—使用访问控制符:

Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为public、protected、default、private,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。

下面详细讲述它们的访问权限问题。

修饰符 同一个类中 同一个包中 子类 所有类
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
1.public表示可以被该项目的所有包中的所有类访问

2.protected表示可以被同一个包的类以及其他包中的子类访问

3.default表示没有修饰符修饰,只有同一个包的类能访问

4.private 表示私有,只有自己类能访问

继承

多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类

特点:

1.子类继承父类的成员变量

当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

1)能够访问父类的public和protected成员变量;不能够访问父类的private成员变量(可以通过反射强制获取);

2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

2.子类继承父类的方法

1)能够访问父类的public和protected成员方法;不能够访问父类的private成员方法(但是能继承);

2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法(但是父类的成员方法如果是静态,子类也必须是静态才能屏蔽,不然编译错误,反之亦然)。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。

多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

多态的要点:

  1. 多态是方法的多态,不是属性(变量)的多态(多态与属性无关)。

  2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。

  3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

**总结:**所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。所谓继承,就是代码重用,而多态,就是一个行为(方法)在不同对象上的多种表现形式。

接口和抽象类

抽象类:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 也就是说,一个类无法描述其生成对象的某一行为(方法),那我们就在这个类中添加抽象方法,来让子类自己重写,或者说定义该方法的内容。就比方说,一个动物类,几乎每中动物都有其独特的移动方式,比方说狗是跑,兔子是跳,乌龟是爬。紧靠动物类我们无法描述所有对象的行为,所以我们可以用抽象方法,来让子类自己描述其移动方法。

接口:接口可以看成比抽象类更抽象的一种特殊的类,但它并不是类。接口只包含全局变量和公共的抽象方法。如果说类是一种模板,接口就是一种框架,它已经规定了数据的大小,无法更改,而且我们要用这个框架,必须按照它的样子往里面添加东西,也就是必须实现其已有的抽象方法。

总结

面向对象的目的就是为了代码的复用,可扩展性,可靠性。能够构建大型的软件项目。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值