面向对象的学习也进行了一段时间,这段时间学了,类和对象;属性;方法;封装;继承;多态;接口。也算是有一些自己的理解,不愧是贴近人类思维的思想,老师讲时我常常会想到以前的一些事物和其交相印证,其中最常想到的就是曾经陪伴过我大专时光许久的游戏,英雄联盟了。我试着用英雄联盟里的一些举例来说明面向对象的理念,如果哪边理解的不对,希望有前辈可以抬我一手,评论告诉我哪边不对-.-
世界是有什么组成的?在java中这个答案显而易见,是由对象组成的嘛,万物皆对象。然而没接触java之前呢?我眼中的世界是什么组成的?我喜欢看小说,小时候看三国水浒,长大了看网络小说。在我眼中世界就是由历史和文化组成的,由先辈传承下来的一些东西和现在人努力想做到的组成的……
万物皆对象,所以java就生生造出个Object类出来。。所有的类一创建就会直接继承它,简直就是祖宗一级的啊!
那么在英雄联盟里会是什么样的呢?我觉得就是先做出一个模板,它只有血量,攻击,防御……等一些小兵、野怪、英雄都有的属性。
类由属性与方法组成,属性很好理解,就是攻击力多少,防御多少,血量多少……
方法稍微抽象点,但说白了就是行为。英雄联盟之中,英雄走路的样子就是一种行为。
对象,就是类的实例化。类,就是对象的抽象化。
比如,我说那个英雄很厉害。这句话中的英雄就是类,是抽象的,每个人脑中想的都不一样;我要是说:“那个猴子很厉害”,那么只要玩过联盟的人都会知道我说的是哪一个英雄了。这里的猴子,就是对英雄这个类的实例化。是类的具体表现。
属性就是对象静态的状态,行为就是对象动态的状态。
方法之中,有一个比较特殊的,就是构造方法,构造方法的意义在于创建对象时对对象进行一个初始化的赋值。
若是想造一个“剑圣”出来的话,就先造个英雄类去继承上面说的模板,再定义一个构造方法,在参数列表中定好值,这个在创建“剑圣”时就可以直接在()中进行赋值,而不用一个一个去赋值了。
封装,就是对类中属性的一个保护,通过访问修饰符private来做到,这样这个属性就变为了私有的,然后可以定义公共的设置与取值方法,来操作属性。这样的好处在于对象不可以直接用“.”运算符直接取值,而且在set方法之中可以进行一系列的操作。
就是防外挂呗,要是开发外挂的直接把联盟里面哪个英雄血量一改,金币什么什么的一改的,那游戏还不崩溃了。。
继承,就是把一个类型中共有的全部抽出来,然后其他类直接去继承这个类,好处在于可以节省代码量,使程序更加结构明了。
就比如英雄的技能吧,所有技能都会有个CD,名称……这些属性吧,范围技能的话应该都有一个范围大小的属性之类的,就可以把这些抽出来,然后每个单个技能去继承这个类,节省了代码量。
多态,就是一个行为的不同表现形式。
比如英雄的走路行为,每个英雄都会走路移动,虽然移动的样子都不同,但他们都有移动的行为,这时候多态就开始了。优点同继承一样。先有了继承与方法,才有多态的体现。
接口,代表一种约定与能力。我的理解是,接口定义的功能定义越细越好,因为接口可以被实现很多个嘛。接口只是说了一件事,却并不去实现它。
学接口时我回忆颇多,让我想起了以前和几个室友刚玩LOL时,有人先送了,然后其他几人一边喊着“你敢单杀我兄弟!?”然后一个一个去送,送完的人就看着旁边人继续送。这就是接口(抽象类)啊!先挂的人就是那个抽象,变成了一个咸鱼,喊了句“为我报仇啊!”,然后其他几人用着不同的方法去实现这个“为他报仇”的口号。已经挂了的,就也变成了喊着口号的抽象类(咸鱼),最后大家都变成了抽象类……
接口与抽象类,我感觉上差别并不大,其实挺大的。。。我认为最主要的区别就是接口可以被实现很多个,但继承只能继承一个,很符合人类思想,一人只有一个直系的爹啊!总不能2个吧???但接口可以被实现多个,因为接口只是一种约定,一种能力,一个口号罢了,若是其他的类接了这个口号,就必须去实现这个口号,除非自己也变成了咸鱼……
就先写这么多吧,哪边有错了以后再修改吧……(然而想这么多并无卵用,游戏貌似大部分都不是java做出来的)