您的位置:首页 > 编程语言 > Java开发

java面向对象思想的认识与理解

2017-01-20 10:54 555 查看
 

理解面向对象需要做的事

 

java面向对象思想的核心是多态。多态机制也叫动态绑定机制。理解这些概念和核心思想比较好的方式就是画内存图。把一个多态例子程序的执行过程,在纸上画出来,那么就相对有一个较好的理解了。分析问题三步走:第一,思考这个问题应该有哪些类,哪些对象。第二,思考这些类,这些对象中的应该有什么属性和方法。第三,思考类和类之间应该存在什么样的关系。

 

 

那么类之间有什么样的关系呢?

 

java是纯粹的面向对象的语言。了解的是一个类,一个类的成员变量、构造方法和成员方法。这些概念是什么,有什么特性,是如何访问的,用什么去访问的,为什么有些类可以访问而有些类不可以访问?而对象是类的一个具体实例。现实生活中各种各样的事物,事物之间必定有关系;那么在java中也有各种各样的类,所以探究类之间的关系就很重要,而且类之间的关系就是现实生活中事物关系的抽象。

 

关联关系 : 比如一个类中的方法的参数,是另一个类的对象。

聚合关系(聚集关系和组合关系)

聚集关系 : 比如一个球队由队长和队员组成。因为这个队长可能是多个对的队长,这个队员可能是其它队的成员呢?都是有可能的,所以聚集关系是,松耦合关系。

组合关系 : 比如一个人是由头和身子加腿组成的。这个人缺一不可,并且这些部分是只属于他的。所以组合关系是强耦合关系。

继承、实现、多态这些都是最核心的关系了。其中多实现从本质上来说,也是多继承。多实现了后,要想访问其中全部方法,则需要多个多态机制,一个接口对应一个具体的多态形式。因为一个接口只暴露它这个接口的方法。强制转换也可以访问对应的方法。

 

我们都知道无论什么事物,它总有一个度,过高过低都会变质的。这些类关系之间的强弱又是怎么表示的呢?利用各种关键字。我把关键字叫做“一种控制逻辑”,它维护着类关系。这里可以体会到事物之间是相互依存的,关键字脱离了多态机制,关键字又有什么用?关键字的存在前提是多态概念的存在。多态机制没有了关键字来进行逻辑控制也就是维护类关系,那么使用多态时,各种类相互关系将十分乱。

 

理解小关系

 

类可以继承类;接口可以继承接口;类可以实现接口,并可以多实现。这里就只理解接口。接口是特殊的抽象类。为什么会存在接口呢?第一,在实际的生活中,事物是存在大量的多继承关系的,比如我是一种动物,我也是一种受保护的动物。第二,java中规定只能够单继承。所以java采用了一个特殊的类,那就是接口来表示这种关系。接口又是以怎样的方式存在呢?第一,它的成员变量必须是
public static final 修饰的。第二,它的成员方法只能是 public 修饰的,并且不能够有实现。为什么呢?是因为我们采用了多实现,所以我们对成员变量和成员方法有它自己应该遵循的规范。这样可以避免各个接口中出现同样名字的成员变量和成员方法所带来的问题。

 

 

动态绑定

 

实现多态机制的条件有继承(实现从本质上来说也是继承),重写方法,父类引用指向子类对象。写一个多态的例子程序,然后画出内存示意图去理解动态绑定是怎样的一种机制。各种概念比如抽象类,接口,继承,实现等这些的存在是为了动态绑定的概念而存在的。单纯理解某个具体的概念是没有什么意义的,但是我们在理解更深层次的概念却是需要这些基础概念作为铺垫的。它的深度将对我们的认知有很大的影响。如果真要具体说明这些概念那么会写厚厚的一本书吧。

 

 

各种关键字

 

修饰符 : private,default,protected,public

super : 调用父类的成员变量、构造方法和成员方法,并记住super在内存中位置。

this : 调用自己的,并记住this在内存中位置。

static,final。这些关键字要么是修饰我们的类,要么是调用我们类里面的成员变量和构造方法以及成员方法。所以在深入理解了这些概念(比如多态机制)后,将我们的关键字灵活地用在类中,所谓灵活应该是满足我们的逻辑需求,满足我们的设计。所以剖开关键字本身的具体功能,关键字其实可以理解为"一种控制逻辑",这个类你可以访问吗?这个类中的成员变量和构造方法以及成员方法你可以访问吗?而这些关乎逻辑的也就是你可以还是不可以?谁说了算?那就是关键字。

 

 

 理解构造器

 

我们利用构造器创建对象时,无论是无参的还是有参的,参数是几个的,只要我们使用了new+构造器方法,那么这个对象内容必定存在于堆内存中,而且每一个成员变量都有值,它的值要么是我们赋的,要么就是系统默认的,也就是说,只要我们new对象,则堆内存中必定存在每一个非静态的成员变量,无一例外。而静态的成员变量存放在 data segment 区域中。每一个对象共享。其中一个修改了,则其它对象访问时,都被修改了。

 

 

方法论

 

1,程序是调式出来的,不是一次写出来的。

2,api文档将陪伴我一生。

3,画内存图的重要性。

4,解决问题的三步走。

 

理解概念本身

 

概念是解释一个事物的,是长时间凝练的最简洁的字来进行说明的,是需要深刻理解它的含义并用自己的逻辑描述出来。

从宏观角度上说,概念囊括一切知识。它把知识串联为一个不可分隔的整体。

从微观上说,理解一个具体的概念,比如java里的多态机制,首先理解到这个自身的含义,然而我们理解到这个自身的含义的深度却是跟其它具体的概念是分不开的,比如我们理解的抽象类,接口,继承的概念,这样一层一层剖析,会发现这些东西都是一体,我们必须用联系一切的概念的眼光看问题。

所以,学什么东西都是相互联系的。基础知识的广度和深度代表我们联系事物的效率和强度,而学习就是在已有的基础上进行不断地联系。

 

讨论意义

 

理解概念有什么意义?

 

从本质上说,理解概念是没有意义的,好在没有意义,所以我们可以自己附加自己认为对的意义。

也正是因为去理解这些概念,让我体会到事物的整体性,相互依存性,不可分隔性。这就是我赋予概念的意义。

也正是不停地去理解这些概念,我的基础知识有了一定的广度和深度,这样我在理解新的概念时,我联系事物的效率和强度变好了,这就是我赋予概念的意义。

也正是对概念有个清晰的认识,体会到一切知识都是概念,而概念把这些知识串联的特别好,并且概念有最简洁的最有效的表达方式,不用去记,我只需理解它含义,并用自己的逻辑说出来,这就是我赋予的概念的意义。

 

学习java有什么意义?

 

了解然后理解java是没有意义的,好在是没有意义的,所以我可以赋予我认为是好的意义。

了解了java,理解到里面的各种概念及最核心的思想,让我体会到现实的问题原来可以这样抽象出来,并提出可行的解决方案。这就是我赋予其意义。

了解了java,不仅理解了一种思想,更让我明白了编程领域的一些基本设施基础的重要性,没有这些基础设施,永远也长不高的,比如数据结构和算法,jvm虚拟机,操作系统,硬件基础等,比如机器语言,汇编语言,面向过程的语言,面向对象的语言等。这就是我赋予它的意义。

理解了java,是没有意义的,带来的这些结果又有什么意义呢?对,结果没有意义,但在了解这些知识的过程中,有认知是对的,有认知是错的,有各种情绪使我不在平和和宁静,慢慢去感受这些,不排斥只是接纳。这是意义。

 

理解人生有什么意义?

 

人生有什么意义?人生是没有意义的,好在没有意义,我们可以赋予人生各种各样的意义。

找到自己喜欢的东西,不问结果只问耕耘。

在探索过程体会快乐,感受这些事物。

 

 

写这篇文章有什么意义?

 

写这篇文章没有什么意义。但是我能够写出这篇文章所经历的过程是充满意义的。

在自己的认知水平上去理解java思想,然后用一定逻辑的语言组织这些话,是有意义的。

记录了这样子的文章,可以让我回头看自己体会的过程,这是有意义的。

其实,看类似于这些东西的文章还真没有什么意义,好在体会到没有什么意义,所以应该去看领域的经典书籍,然后写出这样子的文章是有意义的,即使有些认识理解得不对,哪又有什么呢?如果继续写有什么意义的话题,将会变得没完没了。不过,正是因为写了这些,认识才更深刻,只是一味装新的东西到脑袋而没有写出这些那还真是没有什么意义。

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息