关于面向对象的三个基本特征: 封装、继承、多态
上面资料截取自 link由于文章比较抽象,所以发个帖子跟大家讨论一下....封装是最容易理解的,有以下几种解释方法:
1. 封装就像你建一个类,然后把这个类的属性和方法定义在一起,同时对这些属性和方法予以“public   ,private,protected“等。2. 该包的包,该漏的漏3. 就是对数据的隐藏   ,外部用户只需要关心该类的功能和对象,不需要关心具体的实现过程和数据,这是面向对象里面一个很重要的概念4 . 就像电视,你不需要知道它的内部是由哪些零件组成、如何工作的所以把它们封装起来了,你只知道用遥控器来控制就好
面向对象编程三大思想之一(封装、继承、多态) 

(电视机的内部可以理解为class 零件可以理解为 内部function )内容引用: link 关于继承和多态:个人理解 继承 的概念,就像是电视 和 DVD ,各自都有遥控器,但用起来很不方便,于是你把两个遥控器拆掉,自己做了一个万能遥控器,于是这个新遥控器就可以说是继承了电视 ( class TV ) 和DVD ( class DVD ) (组合..)如上图所示,因为继承的范围包含了很多的概念,本人肤浅的理解如此,希望大家一起讨论剩余的概念分支:继承,泛化和聚合, 多态,覆盖和重载, 如果概念过泛,请至少讲明白 接口 和 虚函数 以及 虚类 ...希望一次性的能把这个概念讨论清楚,请拍砖....

解决方案 »

  1.   

    与其在这儿讨论这种见仁见智的抽象问题 还不如买个thinking in java多看一会儿
      

  2.   

    许多东西不是java里的东西,参考可以。
      

  3.   

    本来是发到php里面的....后来考虑到面向对象...于是发到java区了...
      

  4.   

    继承 的概念,就像是电视 和 DVD ,各自都有遥控器,但用起来很不方便,于是你把两个遥控器拆掉,自己做了一个万能遥控器,于是这个新遥控器就可以说是继承了电视 ( class TV ) 和DVD ( class DVD ) (组合..) 
    你这样理解就不符合面向对象的设计原则了,应该说电视和DVD都要遥控器,但里面的按键不同,功能也有不同,但是它们都是用来遥控的,所以我抽象出一个抽象父类,抽象的功能就是遥控,而电视的遥控器和DVD的遥控器就是继承了抽象父类的遥控功能,至于怎么遥控由具体的子类来实现,这才是继承的思想,
      

  5.   

    至于多态,个人理解,在面向对象的设计原则上要求依赖于抽象,而多态就是抽象在面对不同的具体实现有不同的处理方式,比如定义了一个接口Comparable,拥有比较的功能,而自定义的Num类和XString类实现了这个接口,Num类实现的Comparable是比较数字类型的大小,而XString类实现Comparable是为了实现字符串的自然序大小的比较,而我们定义了
    Comparable var = new Num();通过var调用比较方法是比较数字大小。
    而var = new XString();通过var调用比较方法是比较字符串自然序大小。
    对于var来说这就是多态,即通过同一个变量指向不同的实现类而实现了不同的功能。
      

  6.   

    同意1楼 不如去看看thinking in java
      

  7.   

    额。C++的类关系,要比Java复杂的多。
    个人觉得,只要把Java的类关系搞清楚,就足够用了。C++,由于其类关系复杂,所以,设计的时候非常讲究要用模式,否则,程序员之间无法沟通。
    但Java由于相对简单,并且,很多框架都开源,我们只实现其中的关键部分,所以,对模式的要求较弱。赞同1楼的说,因为Thinking in Java(《Java编程思想》),
    是你从面向过程(或者面向结构)编程 向 面向对象编程 的一个转折点。
    有空的时候,看看前几章,或者只看每章的重点内容,就可以了。
      

  8.   

    你在网上搜索一下你提到的这些关键词,
    就自然有答案
    或者到wikipedia中去找我觉的效果过会很好你的封装的理解基本是正确的继承和多态就不太对了继承和多态是对现实中事物的映射一个很好的例子就是 图形假设图形中有一个方法使计算图形面的不同形状有不同的面积计算方法, 所以你在图形shape这个类中定了一个虚的方法叫做 int caculateArea()然后在三角形triangle,正方形square中 重载这个函数,当然对于不同形状的实现自然是不一样的这样,如果你知道一个实例是图形,就可以调用caculateArea(),系统会根据这个图形实例到底是什么(正方形还是三角形)自己调用正确的caculateArea();
    而不用你自己判断
      

  9.   


    这些特性在刚开始学的时候 有一些认识 知道是java的 或是面向对象的特性
    感念性的了解  不用指望理解透 只有在不断的写程序 开发项目 工作期间 才能深入的理解 吃透的
    现在就是说的再好 也不一定能理解 
    是需要在编写程序时亲身感受的至少我认为是这样  我在刚学的时候 对这些特性就不是很明白 
    但没影响我以后的学习 
    慢慢的 代码敲多了 就有了一定的理解 其实都是一种思想不这么做 完全可以  只是这样 优点多一些慢慢体会喽 
    呵呵
      

  10.   

        虚函数是C++中的概念,多态的发生会占用内存空间。所以为了提高效率,在C++中是不会自动发生多态的。如果想发生多态的行为,必须要指定,在函数(Java中称为方法)的前面必须加一个关键字virtual。
      

  11.   

    thinking in java
    这才是正解!
      

  12.   

    oo四大特性及其解释与比喻,相信不少新手都能倒背如流的应付面试官,
    但是会背,与字面上的理解,这还不行,程序与设计上能否体现恐怕是很多脱离菜鸟级别的人都没能做好的。
    一说oo能说的滔滔不绝,一设计起来,却是明显的oo皮,面向过程的馅儿(引用某位老兄的妙语)
    最后的结论是,扎实、准确的oo概念的理解源自n个项目和n次实践的积累,当自己真正理解了,就会发现自己已经可以用自己的一套语言去叙述这些,而面试官一听,就很容易知道你的水平如何,这东西真不是容易装出来的。
      

  13.   

    THINKING IN JAVA是个好东西啊