zoukankan      html  css  js  c++  java
  • Java中面向对象三大特征

     

    也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是"授课"与"做作业".

     

    Java中面向对象三大特征

    2012-02-10 00:12 提问者: 匿名 等4人
    如题!
    我来帮他解答
    网友推荐答案
    2011-08-06 23:36taotling|当前分类:17排名:339
    封装:
    首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性
    (包括属性行为)归到一个类中,以方便使用.比如人这个东东,可用下面的方式封装:
    人{
    年龄(属性一)
    身高(属性二)
    性别(属性三)

    做事(行为之一)
    走路(行为之二)
    说话(行为之三)
    }


    继承:
    由于封装,使得有共同特征的一类事物的所有描述信息都被归于一类之中,但我们知道,这并不是万能的,有些事物有共性,但还存在区别,比如教师,简单封装起来如下:
    教师{
    年龄(属性一)
    身高(属性二)
    性别(属性三)

    做事(行为之一)
    走路(行为之二)
    说话(行为之三)

    教书(行为之四)
    }
    上面对"教师"的封装,与对"人"的封装基本上差不多,只是多了一个特征行为:教书,
    教师有与人一样的共性, 但我们不能说"人教书",也就是不能把教书封装到"人"之中去,教书是教师的特征行为之一. 为了省事地封装教师(代码的复用,这只是继承存在的原因之一), 可以让教师去继承人,如:
    教师 extends 人{
    教书(行为之三)
    }
    这样,我们就不用重新定义那些已经被"人"这一个类所封装的那些属性行为了,而只需要使用继承的方式,在人的基础上拓展教师专有的行为,即"教书"即可把教师描述出来;这样的结果, 即是教师也同时拥有"人"之中所封装的一切属性行为, 还拥有自己的特征行为"教书".


    多态:
    多态的概念发展出来,是以封装和继承为基础的(其实我觉得抽象也应该算是面向对象的大特征之一,要封装,抽象是必须的)

    简单的理解一下多态,比如:
    人这个类,封装了很多人类共有的特性,
    教师是人的子类,继承了人的属性行为,当然教师有自己的特征行为,比如教书授课;
    学生是人的子类,继承了人的属性行为,当然学生有自己的特征行为,比如学习做作业;

    现在,当我们需要去描述教师与学生各自的行为的时候, 我们可以分开来说"教师在授课", "学生做作业", 但如果我们要站在抽象的角度, 也就是从教师与学生的父类"人"的角度, 来同时描述他们各自的行为时,我们怎么描述?"人在授课"?"人在做作业"?这是不是怪怪的很不合适?不合适的问题就在于, 对于行为主体,我们使用了抽象层次的东东"人",而对于行为本身, 我们却使用了具体的东东"授课"与"教书". 怎么解决呢? 那就需要解决抽象与具体的矛盾问题.
    既然是站在抽象在角度来描述,那我们把行为抽象一下,不就能同时描述了吗?比如"人在做事"(教师授课与学生做作业都可以说成人在做事),这样就解决了抽象层次与具体层次之间的矛盾.

    到了这一步, 我们可以把两个描述: "教师在做事", "学生在做事" 两者统一为"人在做事",
    然后, 我们可以在"教师"的"做事"行为中去调用教师自己的特征行为"授课",
    在"学生"的"做事"行为中去调用学生自己的特征行为"做作业",
    所以,当调用"人"去"做事"的时候,如果这个人是教师,那他所做的事实际上就是"教书",
    如果这个人是学生,那他所做的事实际上就是"做作业".
    也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是"授课"与"做作业".

    完成上述的描述过程, 其实就是多态机制的体现.

    多态, 就是站在抽象的层面上去实施一个统一的行为,到个体(具体)的层面上时, 这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为.

    多态比起封装与继承来说要复杂很多, 上面的描述很简单, 不用去死抠多态两个字,
    其实只要明白:
    能站在抽象的角度去描述一件事,
    而针对这件抽象的事, 对于每个个体(具体)又能找到其自身的行为去执行, 这就是多态.
  • 相关阅读:
    iOS NSNotificationCenter 最基本使用
    iOS SDK 从配置文件里读SDK。转化成class 可同时加载多个SDK
    NSString json 车NSDictionary
    在C#中使用.NET SDK创建控制
    推荐几款制作网页滚动动画的 JavaScript 库
    CSS选择器、优先级与匹配原理
    为ASP.NET控件加入快捷菜单
    如何使用ASP.NET开发基于推技术的聊天室?
    ASP.NET Web API queryString访问的一点总结
    ASP.net 控件实现数据级联
  • 原文地址:https://www.cnblogs.com/jeanschen/p/3277066.html
Copyright © 2011-2022 走看看