什么是面向对象编程(OOP)?

Java 程序员第一个要了解的基础概念就是:什么是面向对象编程(OOP)html

玩过 DOTA2 (一款推塔杀人的游戏)吗?里面有个齐天大圣的角色,欧洲战队玩的很溜,国内战队却不怎么会玩,自家人不会玩自家的神话英雄,实在有点悲哀。java

咱们用 Java 定义一个孙悟空的类吧:程序员

public class SunWukong {
    private Integer healthPoint;// 生命值
    private Integer magicPoint;// 魔法值
    
    /**
     * 棒击大地
     */
    private void rodHittingTheEarth() {
        
    }
    
    /**
     * 丛林之舞
     */
    private void jungleDance() {
        
    }

}

咱们给他两个属性(生命值 healthPoint 和魔法值 magicPoint),给他两个技能(棒击大地 rodHittingTheEarth() 和丛林之舞 jungleDance())。编程

假如我是 LGD(老干爹,国内知名 DOTA 战队)的教练 357(已辞职),一名聪明绝顶的好教练(真的秃头了),主要负责赛前的 BP(Ban 和 Pick,拌掉对方的英雄和选己方英雄) 工做。oop

如今,是 TI9 的小组赛(已结束),LGD 对阵 OB(欧洲战队,两届冠军) 的第一局。code

我——357 在 BP 阶段先 BAN 掉了比较克制孙悟空的兽王和发条技师,而后在选人阶段(PICK)挑选了水晶室女这个冰美人来和孙悟空这个一身毛的家伙搭配。htm

那么,在我选孙悟空的这个阶段,就等于说建立了一个孙悟空的对象,也就至关于 Java 中的 new SunWukong()。选好了孙悟空,让谁来玩呢?天然是队中号称世界第一中单的 maybe。对象

面向对象编程(OOP)其实并不难懂,不就是英文单词 Object-Oriented Programming 的首字母缩写嘛。OOP 给咱们一种概念,就是“万物皆对象”——咱们能够尽量的发挥想象,把现实中的物(包括动物、人物、甚至无生命的事物)抽象为一种计算机语言(好比 Java)能懂的模型,那么接下来,计算机解决现实中的问题就变得简单了起来。继承

OOP 的强大之处就在于,它使咱们没必要依照计算机的限制来模拟现实中的物;咱们能够基于现实中要解决的问题来构建对象,使这个对象具备现实中物所具备的特征(对应 Java 类中的属性)和行为(对应 Java 类中的方法)。物不一样,对象所具备的属性和方法就会不一样。游戏

还拿 DOTA 中的英雄来讲吧。

全部的英雄均可以抽象为一个类(对象是类的实例化),这个类包含了英雄对应的成长属性(生命值、魔法值、伤害值、护甲值等等),以及对应的技能行为。那么,怎么区分每一个英雄的不一样呢?好比说冰美人水晶室女是一个魔法辅助类的英雄,所以,她的初始化生命值天然比敏捷类的齐天大圣低一些,但魔法值高一些;另外,他们的技能也彻底不一样——孙悟空拿着一根金箍棒,因此他的技能就有棒击大地;水晶室女拿着一根法杖,因此她的技能就有冰霜新星、冰封禁制等。

面向对象编程给咱们了一些重要的启示:

1)万物皆对象。

2)程序是对象相互协做的一个过程,他们经过发送消息来告知彼此要作的事情。

3)每一个对象都有本身的类型,也就是“每一个对象都是某个类(抽象数据类型)的一个实例”。尽管每一个对象都是惟一的(在内存中拥有一个惟一的地址),但具备相同状态(属性、变量)和相似行为(方法)的对象能够归属为一个类。

4)每一个对象都提供了某种服务。好比说孙悟空能够跳上树上(丛林之舞),而后再跳下来对区域内的敌人形成减速和伤害(乾坤跳跃)。

面向对象编程的代码易维护、易复用、易扩展,由于面向对象有三大特性:封装、继承、多态。

1)封装,每一个对象的模板——类能够自由地定义属性和行为,使其有别于别的类。

2)继承,子类能够轻松地复用父类的代码(属性和行为),只须要一个关键字——extends。若是父类的属性不知足子类的需求,能够追加;若是父类的方法不知足子类的需求,能够覆盖。

3)多态,这个特性是基于前面两个特性衍生出来的,比较难掌握一些。能够先尝试理解一下。如今有两个对象,一个是子类的对象,一个是父类的对象,假如把它们传递给同一个方法的时候,该方法的参数能够定义为父类的类型(假如定义为子类类型的时候,父类就没法传递),方法在执行的时候会自动识别传递的是父类仍是子类。

封装、继承、多态这三个特性对于初学者来讲,有点头大。不过不用担忧,我会在后面的文章中继续深刻地介绍。

上一篇:Java:程序不过是几行代码的集合

下一篇:如何理解 Java 中的继承?

相关文章
相关标签/搜索