Java入门-面向对象

Java入门教程

Coffee小栈

上篇文章说过,Java与C最大的区别就是面向对象与面向过程。那么这篇文章咱们就来详细说说,到底什么是面向对象!

再次确认你对C语言的理解,C语言是一切语言的根本!当然除了二进制代码和汇编语言,如果你精通那些语言,请教我!!

〖 Java 〗

首先跟大家介绍两个概念:类(Class),对象(Object)

何为类?

类是对现实事物的抽象表示,某一类事物共有的特性,属性及行为方式,包括事物的状态信息(成员变量)和行为方式(成员方法)。说白了与现实生活中一样,类是泛指,比如某一群人,某一种人,某一种动物。人以类聚,物以群分。这个称之为类

何为对象?

对象是对抽象事物的具体表现在类的基础上,比如特指了某个人的名字,比如有一类特别有钱的人,这个人叫张三,这一类有钱的人称之为类,张三称之为对象。

说白了,类与对象的概念,我觉得就是为了让人更好理解代码,按照人的思维方式编程,但实际上计算机是不好理解的,人可以很容易分辨出手写的汉字,数字,计算机想要识别人写的东西就超级费劲了对吧,但为什么还用这样的方式来设计(Java)呢?

这就要从面向对象编程的三大特征(基本思想)说起 ---- 多态、继承、封装

所谓多态:简单讲就是程序用同一个方案解决相似但具体内容不同的(一类)问题。比如有一个自行车类,依据这个类实例化一个山地车,一个双人自行车。那么调用这两个对象的获取座位数的方法,山地车返回1,双人车返回2。

同一个类,同一个方法,反回不同的结果。这其实就是多态

--实例化:所谓实例化,就是根据类创建出来的具体的对象,比如有“人”这个类,根据这个类创建(new)出来一个叫张三的这个具体的人,这个过程就叫实例化

所谓继承:简单讲就是你父亲已经创立了一个公司,你不用从头再走一遍创业的过程,你可以继承你父亲的公司已有的业务,并拓展公司的其他业务。

所谓封装:简单讲就是保护自身不被外界错误的操作改变自身,假如你生产一个电脑,你可以对内部硬件自定义,比如CPU要Intel i7系列,内存要8G,显卡要GTX1080TI。但你不能不要CPU,封装允许你对封装认可你可以修改的区域进行修改,保护了不允许你修改的部分。

回到之前的问题,为什么要用OOP思想写程序呢?

答案是:重用性,拓展性,灵活性

多态可以省去很多重复代码,用一个方案解决多种同类问题,继承也可以省去很多共同的代码。

比如你写了一个类:人,人有鼻子、眼睛、耳朵、嘴等等。写好了人这个类,不管穷人、富人、男人、女人是不是都有这些,我们让这些人继承人这个类,这样不管哪类人都有了鼻子、眼睛、耳朵、嘴。这时候可以根据穷人拓展穷人的方法,坐公交的方法,苦逼上班的方法,吃粗茶淡饭的方法。富人可以拓展富人的方法,开劳斯莱斯的方法,坐家里数钱的方法,吃鲍鱼海参的方法。这就体现了OOP思想的拓展性和灵活性

当然,上面的内容我说的蛮抽象的,道理我们都懂,那怎么落实到实际的代码呢?(部分新手思想可能没办法那么快的从面向过程转换到面向对象上,建议你根据下面的具体实例,多看几遍上面的解释)

我从Eclipse如何创建一个项目开始说起吧!

New菜单里有Java Project就直接选择Java Project,如果没有就选择Project,从那里找Java Project

注:包其实就是文件夹,为了方便管理代码

这样我们一个项目就创建完成了!看到了熟悉的main函数哈

再创建一个Class,命名为GirlFriend,在创建这个Class时不要勾选下面的选项,那个选项就是Eclipse帮你自动生成一个main函数。

OK,下面咱们就开始讲解OOP。

首先我们看src下test包里有两个文件,oop_test.java、GirlFriend.java。

oop_test.java里面包含了main函数。

可以看到,我们七行代码是

GirlFriendg=newGirlFriend();

没错,这个就是咱们刚创建的第二个Class:GirlFriend.java

先不管GirlFriend.java里写了什么东西,我们先运行一下,看到命令行里显示的的结果:

女朋友给你送早餐

女朋友跑了

你说:fff

女朋友说:滚,分手!

然而我在main函数中并没有写这样的代码,那这些话是怎么输出的呢?

没错,这些代码就在GirlFriend.java中,接下来让我们一起来看GirlFriend.java里面的代码

首先,我定义了一个类,女朋友类,然后在女朋友类里面写了三个方法,run()、breakfirst()、talk()。

实现的功能很简单,就是分别对屏幕输出字符串。

在talk()方法中稍微复杂点,首先看到函数声明的部分

publicvoidtalk(Stringworld)

括号中String代表,这个函数需要在被调用时传入一个String类型的数据,后面的world是传入后用world这个单词来使用传入的这个String类型的数据。

里面if判定里使用了一个world.equals()方法,这个方法就是判定字符串是否相同,也就是world表示的数据,是否就是"给你买包",如果是就返回ture,如果有区别就返回false。与C语言中strcmp(str1,str2)方法是一样的

读完了GirlFriend.java,我们回到oop_test.java

再看第6行代码,我们实例化(new)了一个女朋友对象,从这个女朋友类中具体的生成了一个你的女朋友。并给你的女朋友起了一个名,叫g,下面你就可以用g来使用你女朋友这个对象了。

通过阅读GirlFriend.java,我们知道你刚实例化出来的对象拥有三个方法,run()、breakfirst()、talk()。分别去调用这三个方法,所以看到控制台输出了在GirlFriend.java中定义的语句。

也可以理解为,GirlFriend这个对象拥有给你送早餐、跑、和判断你是否给她买包的能力。

当然你也可以定义一个挖掘机,拥有开车,倒车,挖土等能力。或者再实际一点,定义一个网络下载器,拥有获取网络状态,连接目标地址,下载,保存下载的文件等能力。

OK,今天给大家介绍了OOP编程中基本的实现,至于多态、继承、封装,并没有提及,这些在大家有一些面向对象编程经验,写过一些稍微复杂点的代码,遇到了实际问题,想找办法优化的时候再给大家讲这三点,那时候你才会真正体会到什么叫做真正的面向对象编程的好处

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180116G0TGU700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券