对面向对象几个基本概念的理解

1.对象(Object)
在面向对象世界里,一切都是对象。所有你能想到的词,只要它是名词性的,都可以是对象。

2.(Class)和实例(Instance)
所谓类就是对对象进行抽象的描述。实例呢就是将抽象的描述转化成一个实实在在的事物。例如,玛丽这个人就是人类的一个实例。
面向世界里将任何类都分成两部分来描述,一部分是属性,另一部分是方法。
所谓属性就是事物的名词性特性,方法是事物的动词性特性,例如,人,可以定义一个人类,那么它的性别就是属性,名字也是它的属性,吃就是方法。

3.封装(Encapsulation)
封装不是面向对象特有的,我们所熟悉的面相过程的函数就是一种封装。封装最主要的目的就是要隐藏内部的实现方法,对外只提供有几个功能(也就是接口),至于这些功能是怎么实现的,使用者不需要也没必要知道。

4.继承(Inheritance)
继承应该是面向对象特有的也是最具特色的特性了吧,因此也是最难理解的。最简单的理解就是,所谓继承就是对象与对象(类和类)之间抽象到具体的关系。例如,汽车就是一个抽象的对象,而轿车和卡车就是较具体的对象,它们都具有汽车的共性,因此轿车和卡车都是从汽车继承而来的,它们的父辈就是汽车。
为什么要有继承这个特性呢?这应该是现实世界有关吧,现实世界里随处都能看到继承关系。在软件世界里,它最大的好处就是能大大提高代码的重用。我们可以将最基础的共用的代码在父辈类中定义,而在子辈中只定义与自己密切相关的代码。如果要增加功能时可能只要增加相关的子类,并让该子类从父辈类中集成就够了,而不用重新编写所有的代码。这个特性真的太让人激动了,可是要注意继承并非万能,滥用继承不但不能加快开发,反而会陷入不可收拾的地步
从继承派生出来的概念实在太多了,什么单继承啊,多继承啊,覆盖和重载啊,多态啊这些统统与继承有关系。单继承和多继承比较好理解,单继承就是子类只从一个父类那里继承,多继承就是子类多个不同父类继承而来。其他的以后写。

5.覆盖(Override)和重载(Overload)
这两个特性实在太像了,要怎么区分呢?简单的讲就是,所谓覆盖就是子类讲父类的某个方法内部重新定义了,记住是内部,它并不修改方法对外形式(例如返回值和参数);而重载就是子类无非定义了一个与父类同门的方法而已,而其它的则完全颠覆(内部实现和对外形式)。举个例子吧。

    public class A
    {
        String name;
        public String getValues()
        {
            return "Values is:"name;
        }
    }

    public class B extends A
    {
        public String getValues() // 这个就是覆盖
        {
            return "Values is Override";
        }
    }

    public class C extends A
    {
        public Int getValue(int i) // 这个就是重载
        {
            return i+1;
        }
    }

多态(Polymorphism)属于运行时问题,就是在运行时动态绑定覆盖方法(为什么不是重载方法?)。例如,可以什么一个Graph类型的变量,而在运行时,可以把Circle类型或Rectangle类型的对象赋给该变量(Circle和Rectangle都是Graph的子类)。这样虽然调用相同的方法,可实现的功能却是不一样的。明显可以提高代码的重用率。

6.消息(Message)
消息就是一个对象向另一个对象发出服务请求,完全符合现实世界的习惯。当一个对象要请求另一个对象服务时,只要向该对象发送一个请求,然后继续干自己的事,当被请求的对象将事情干完后会通知事情干完了,这就是异步消息;也可以一直等待被请求的对象把事情干完,这就是同步消息。怎么实现呢?其实就是调用被请求对象所提供的某个对外公开的方法(类似函数调用,可以函数调用可没有同步异步的概念)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值