黑马程序员技术交流社区

标题: 张孝祥老师的一个思考题! [打印本页]

作者: wssjdysf    时间: 2013-10-29 23:33
标题: 张孝祥老师的一个思考题!
思考题:eclipse工作台中的所有工程继承工作台的配置,其中某个工程也可以覆盖工作台的配置!这是不是java面向对象的思想啊?
  我的答案:是。不知道其他同学有会有什么答案呢?
从思想上我感觉到了,他的继承与多态,但是封装我没有什么感觉,,,额~~~~
有个小知识点:封装,继承,多态是面向对象的三大特性。
在这我脑子突然冒出个疑问:面向对象有封装,继承,多态;那有封装,继承,多态的是面向对象吗?
作者: Cheers_for_CRAZ    时间: 2013-10-30 22:30
继承(inheritance)
    继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
继承是为了重用父类代码,同时为实现多态性作准备。

封装(encapsulation)
    类使得数据和对数据的操作集成在一起,从而对使用该类的其他人来说,可以不管它的实现方法,而只管用它的功能,从而实现所谓的信息隐藏。  封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。
多态(polymorphism)
方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关 系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。
    多态又分为设计时多态和运行时多态,例如重载又被称为设计时多态,而对于覆盖或继承的方法,JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。总而言之,面向对象的设计的典型特点就是继承,封装和多态,这些特点也是面向对象之所以能如此盛行的关键所在。
对于多态,可以总结它为:
    一、使用父类类型的引用指向子类的对象;该引用只能调用父类中定义的方法和变量;
    二、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
    三、变量不能被重写(覆盖),”重写“的概念只针对方法。

面向对象主要体现的是一种思想,它的出现是为了提高效率。只要把一些类写好了,以后直接拿来用就可以了!并不需要知道里面写了些什么,只知道
它实现了什么样的功能!直接用就可以了。当然,也可以用别的语言体现这种思想!面向对象是一种思想,和语言本身没有多大的关系,只是一些语言比如C++Java C#等,面向对象编程更加方便,也有更多的特性.用C 可以写出面向对象风格的程序,linux源码里面都有很多类似的用法,但是你可能会觉得很别扭,因为这样的实现都需要用到回调函数。所以你应该选择合适的工具,java,c++等具有很好的面向对象的特性!

作者: --_.Is’攸稀    时间: 2013-10-31 09:34
“有封装,继承,多态的是面向对象”这话应该对的把,封装,继承,多态只有面向对象的语言才有的把,面向程序的貌似没有这些,因为程序都是顺着下来的。
学java的时候也感觉面向对象的好处就是有封装,继承,多态,还有重载,覆盖,接口。这些对写程序而言都方便了很多。另外分析下各个的意思。
封装:就是将一个有共同属性的东西都放到一个专门的类里面,要用就调用继承它。
抽象:将一类东西抽象化,可以用来当父类理解
继承:很类似现实,你继承你父亲的财产、相貌、声音等等
接口:一种灵活的编程方式,类似与插孔
多态:动物都会叫,但是没到一中特定的动物都有特定的叫法。

作者: 0从谷0    时间: 2013-10-31 09:54
Cheers_for_CRAZ 发表于 2013-10-30 22:30
继承(inheritance)
    继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或 ...

我觉得上面谈到的面向对象思想有误:
我可不是来找茬的哦。个人认为既然学面向对象编程,面向对象思想很重要,它是学习面向对象的向导,没有它我们很可能会走偏方向。如果让我描述什么是面向对象,可能会写的有点乱。我在百度百科里看到过一篇文章,感觉还不错哦,于是摘录以下部分。
面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。
一、面向对象的基本概念
(1)对象
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(2)对象的状态和行为
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中
(3)类
具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(4)类的结构
在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。
①一般——具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。
②整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。
(5)消息和方法
对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2