new 一个模板、类_JAVA基础核心理解类、对象、面向对象编程、面向接口编程

什么是类?什么是对象?什么是面向对象编程?什么是面向接口编程?学习面向对象思想的语言,比如java,第一关可能就是要理解这些概念。可能有的同学学习了很久JAVA,遇到这个问题还感到有点秃然~下面就来好好琢磨一下。

bac9dd1d1ac44ca8fe82083d2be3b8ae.png

“一(卤)拳(蛋)超人”

类和对象的概念

首先总结一下:类是一个模板,对象就是用这个模板创造出来的东西。

比如,男孩,他就是一个模板,男的就行,那么对象是什么呢?就是具体某个男孩,比如男孩BOB,男孩fossi.

请看下面一张图:

16ad3013878447458f25e67847c2ea5a.png

男孩女孩是比较抽象的概念,是模板,左边一排就是其具体的一些对象。你看长的都不一样,有的黑,有的白,有的高,有的矮,国家地区也不一样。但是他们都属于男孩或者女孩。

那么同理,人就是一个类,男孩女孩就是人的子类,因为男孩女孩肯定属于人这个范畴。

这里引出了JAVA特性中的继承。继承简单理解就是父类有的东西(访问级别不能是private)的,那都是你的。比如你老爸的房子,就是属于你的,你出入自由。

刚才说到继承,男孩女孩就是人的子类,男孩女孩继承了人的基本特性。此外,人还可以分为胖人和瘦人这个子类等等。

所以只要是抽象的模板,就是一个类。

  • 对象:对象是类的一个实例,有状态和行为。例如,一条叫做fossi的活生生的男孩是一个对象,它的状态有:名字、身高、体重;行为有:唱歌、吃饭等。

  • 类:类是一个模板,它描述一类对象的行为和状态。

下面拿狗这个类来说事。狗是动物这个类的子类。

Java中创建类

构造器方法说明

需要创造一个类对象出来的时候,要用到这个类的构造器方法,那么啥是构造器方法呢?构造器方法就是创造类时的初始化方法,和类同名的方法,你可以在里面写自己的代码

//模版=====华丽的分割线=====
一个相对比较完整的类
//模版}=====华丽的分割线=====

创建对象

语法:

类名 对象名 = new 类名() ;

举例:

Dog fossi ;    // 先声明一个 Dog 类的对象 fossi
fossi = new Dog("fossi") ; // 用 new 关键字实例化 Dog 的对象 fossi,此时调用构造方法二

通过Dog这个类可以创造出fossi对象.下面我才能操作这个对象:

//让它的颜色为黑色
fossi.color = "black";
//让它叫
fossi.say();

面向对象

在理解了什么是类,什么是对象,就可以来说说面向对象到底是什么了。

先来说说面向过程,大家都学习过C语言。C语言就是典型的面向过程的语言。

举个例子:要把大象装进冰箱里,这件事,面向过程的程序员是这样思考的:

  • 把冰箱门儿打开。

  • 把大象装进去。

  • 把冰箱门儿关上。

上面的每一件事都用一个函数来实现。抽象为下面三个函数:

  • openTheDoor();

  • pushElephant();

  • closeTheDoor();

这样不挺好的吗?为什么不用面向过程的这种思维来编程呢,还要搞出什么面向对象来。

需求又来啦:

  • 「我要把大象装微波炉里」

  • 「我要把狮子也装冰箱里」

  • 「我要把大象装冰箱,但是门别关,敞着就行」

这个时候,面向过程的程序员就悲剧了,来一个需求我就写一个函数,我还能下班吗?

面向对象从另一个角度来解决这个问题。它抛弃了函数,把「对象」作为程序的基本单元

面向对象的世界里,到处都是对象。即:万物皆对象(多么富有哲学意味)

比如人这个对象,每个人都有这样的属性:身高、体重、年龄。每个人都有这样的行为:吃饭、睡觉、上厕所。

那么,这些通用的属性+方法可以构建一个模板:人这个类。因为每个具体的人都需要这些基本的东西。那么类就对其封装。

那么,回到刚才的需求,面向对象是如何思考这件事的呢?

  • 向冰箱下达「开门」的命令。

  • 向大象下达「进冰箱」的命令。

  • 向冰箱下达「关门」的命令。

就是说,我不用亲自管开门的细节,我只要叫他开门即可。

我们创建的对象,应该是刚刚好能做完它能做的事情,不多做,不少做。多做了容易耦合,各种功能杂糅在一个对象里。比如我有一个对象叫「汽车」,可以「行驶」,可以「载人」,现在的需求是要实现「载人飞行」,就不能重用这个对象,必须新定义一个对象「飞机」来做。如果你给「汽车」插上了翅膀,赋予了它「飞行」的能力,那么新来的同学面对你的代码就会莫名其妙,无从下手。

但是不禁要问:怎么实现这种下达命令就可以自动去执行的效果呢?或者说,我怎么知道它有这个功能啊!

面向接口编程

现在我们把「数据」和「行为」都封装到了对象里,相当于对象成了一个黑匣子,那我们怎么知道对象具有什么样的能力呢?这个问题的关键就是接口。

因为无论是把大象装进洗衣机还是冰箱,都要求洗衣机或者冰箱有开门和关门的功能。这个时候,我们就可以抽象出来一个接口:【自动门】。这个接口里面定义两个能力:【开门】和【关门】。

让洗衣机、冰箱、微波炉这些带门的东西全部实现【自动门】接口。

这个时候,每个具体的实现可能略有不同,比如冰箱开门是往外拽,但是洗衣机开门可能是往上翻盖子。

此时,我有一个需求,把大象放进冰箱。我一看,冰箱实现了【自动门】这个接口,里面有【开门】和【关门】两个方法,ok,我知道冰箱是可以开门和关门了,那就好办了。我直接下达命令即可。还是跟上面一样的步骤/

  • 向冰箱下达「开门」的命令。

  • 向大象下达「进冰箱」的命令。

  • 向冰箱下达「关门」的命令。

此时,需要将狮子也装冰箱里。那还是一样:

  • 向冰箱下达「开门」的命令。

  • 向狮子下达「进冰箱」的命令。

  • 向冰箱下达「关门」的命令。

此时,我要把大象装冰箱,但是门别关,敞着就行,那就:

  • 向冰箱下达「开门」的命令。

  • 向大象下达「进冰箱」的命令。

是不是很方便?冰箱也可以换,我可以换成任何东西,只要实现了这个接口,这些东西就都有这些能力,那我才不管里面到底怎么实现的呢,直接下达【开门】【关门】命令即可。

这就是面向过程和面向对象编程的区别,也顺带地理解了什么是面向接口编程。这是学习JAVA最基础也是最核心的点。

整理自:

  • https://tryenough.com/java05

  • http://www.woshipm.com/pmd/294180.html

  • ......

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值