我今日来在为"面向对象"编程思想苦恼 我的脑子真的转不过来 每次老师说要我们分析出一个系统所涉及到的"类"我就头疼,不是写差了,就是对系统的"类"还没想全 ,不要误会 这里的 全是说比较满意 就是总体不满意 不是方法不合理就是不理解他们之间的关系 譬如: 我举个例子 1. 打印机和纸 中就有个 "写字的方法" 这个方法是纸的方法还是打印机的方法
2. 人走到门边 去关门 "关门的方法" 这个方法是写在门类 还是人类中
3. 坦克 打击了 一辆坦克 判断有没有击毙 这个 "判断击毙的方法" 是坦克的方法吗 4. 一个人拿着两块石头要磨出石刀 请问这个 "磨的方法" 是人的方法还是石刀的方法
还有很多很多 很复杂的都有 我不是说为这几个问题就苦恼 我是说有时脑子真的会越来越混 遇到这些问题老是有点靠 "蒙" 希望大家给我一个 一击致命 的 说法 让我能真正理解 我有看面向对象的书 说实在的 面向对象就像个美女 把男人迷了又迷 我真不知到什么时候我才能清醒
解决方案 »
- 有两个java文件,文件B使用了文件A的一个类,如何文件才能编译通过?
- 我们的java上机题!(大侠帮忙!!)
- 新手上路:addListener(this)的问题
- 谁能帮我解决JBuilder6的问题?
- 关于quake
- 想学JAVA,大家给我介绍几本好书行不行?
- 为什么delete或update数据是会停掉??
- 很简单的显示窗口的程序出错 Exception in thread "main" java.lang.NoClassDefFoundError: FirstTest
- 我想学java,曾经学过pb,会点vc,大概需要多长时间能达到一个中等的水平!我比较好学!谢谢!
- 网络编程 互发信息不成功 求助
- 请教下达人,如果倒着按行读文件内容,(文件输入流)
- 用户登录功能怎么做?
别急吗,慢慢来
学的多了,练的多了
你自然就明白了你现在需要大量实践
等到从量变转为质变得时候,你就不会来问这个问题了
呵呵
继承 口语化表述就是 当你诺基亚的老型号手机已经无法满足你了,你就要换一个新的诺基亚手机 但是老的功能还是沿用了,或者给这个老的功能更加的强化了 称之为重写。这个就是继承的重点子类继承父类,重写父类的方法封装 这个就比较简单了 你的新的诺基亚手机内部构造你会了解么?不可能 人家把它给封装了~~把“手机”看做一个类 很抽象 不是具体到哪一个手机,但是你买的那个就是一个实例(对象)。“你买的诺基亚手机”就是这个实例(对象)。里面封装的信息(零件)你无法看到,这个就是封装 同时也应该理解什么叫面向对象了吧?定义一个抽象定义“手机” 实例化一个对象 “诺基亚手机”多态 就是你爸爸帮你做JAVA作业 如果你已经理解上面我说的那个面向对象的思想话 那么我这句话你就能理解了 父类引用指向子类对象。 Persion p = new Student(); Student类是Persion的子类 学生也是人。所以学生继承了人这个类。p是父类引用,new Student()会生成一个子类对象。就是p指向new Student()这个对象 通过p我们可以调用student()对象中的属性。希望我的解释可以让你明白!
2. 人走到门边 去关门 "关门的方法" 这个方法是写在门类 还是人类中 //应该是门自己的方法,因为如果关门是人的方法的话,那么人是不是活着有点累?联想开来,门是不是还有判断自身状态的方法,比如isOpened();isClosed()等等 3. 坦克 打击了 一辆坦克 判断有没有击毙 这个 "判断击毙的方法" 是坦克的方法吗 //跟上面门一样,应该是坦克这个类提供这样的方法,不然,难道又要人去判断吗?想累死人吗? 4. 一个人拿着两块石头要磨出石刀 请问这个 "磨的方法" 是人的方法还是石刀的方法//同样的道理,磨刀应该是刀的方法,哎!你们老师真会举例子,全是人和万事万物的例子...
其实,这些例子表明了面向对象的一个基本概念——封装。也就是说一个类,前提是这个类的功能已经完整的实现了,那么在这样一种情况下,你可以通过类的方法来了解和操作这个类的实例化对象。结合上面一个例子吧,比如说门,有一个类叫Door,那么我实例化一个门,也就是:Door door = new Door(); 那么通过door这个对象,我能知道它的一切,比如长宽高,比如是否关了,我还能操作这个门,比如关门,开门。不知道你懂了吗?
其中 主和 宾 是名词,把他抽象成类 谓 可以分析成动词。 那么谓 肯定是 主 施出来的,故谓应该是 主这个类的方法。再扩展 谓 到 一个形容词或一个表状态的词,也就是宾 的成员变量了。
如: “打印机 在纸上 打 字”分析成 “打印机 打字 到纸上” 打印机是 主, 纸是 宾, 打字是 谓。
所以 打字是 打印机的方法,即有print()方法。同时,当打印机在纸上打字完后,纸也要有个打上了字的状态量,即 纸这个类有个isprint 变量。
同理分析下面的。(当然上面的语法在面对具体情况时要扩展下下)
在打印方法的定义中,还要传入一个纸对象作为参数,然后调用纸的draw()方法,把结果打印在纸上。
这其实和现实生活中是一样的,把这些分解开看,它的实质其实很简单!
(生气吧,哈哈,故意气你,看你开不开窍!)
既然是模拟现实事物,一些常识问题必须弄清楚。
比如你说的第一个例子:“写字的方法”,这当然是人类才拥有的能力。而打印机的功能只是接收一个输入,然后把信息输出到纸上。从编程的角度考虑,如果把纸当成一个商品,我们所在意的是它的尺寸,它的价格,它的生产地,它的质量(quality);如果把它当成显示信息的工具,那么首先要考虑的是它的尺寸问题。
而第三个例子:从击毙方面考虑,你可以给坦克设置一个状态属性,要么被击毙,要么完好无损,还有可能只受了点轻微损伤,这样只要查询一个坦克的这个状态属性就可断定它是否被灭了;还可以给坦克分配一个功绩表,表中记录它目前共击毙了多少坦克,分别是那几辆。
所以怎样给一个类分配属性,要看具体的需要。
不用费多大脑子,实体类都是POJO。
搞定。
1. 打印机和纸 中就有个 "写字的方法" 这个方法是纸的方法还是打印机的方法
打印的时候,是打印机“往”纸上打印,显然打印机是主动吧,那么“打印”这个及物动词明明的
方法是不是应该写在打印机类里比较合理呢?
2. 人走到门边 去关门 "关门的方法" 这个方法是写在门类 还是人类中
同上,“人”把“门”关上,而不是“门”让“人”把自己关上,那么人是主动方,门是被动方,
“关门”当然也应该是“人”的方法而不是“门”的。
3. 坦克 打击了 一辆坦克 判断有没有击毙 这个 "判断击毙的方法" 是坦克的方法吗
这个就不是那么绝对了,比如你老师所说的方法是说的通的。另外,判断击中同样也可以是坦克
自己的方法(只要“坦克”这个类里定义了“是否被击中”的flag)
4. 一个人拿着两块石头要磨出石刀 请问这个 "磨的方法" 是人的方法还是石刀的方法
这个用以上思考方法去想的话,“磨”自然是人的方法才比较合理。3楼说得很好,应该用人理解自然界的方法去理解面向对象。“世间万物皆对象”对于初学者来说,这简单的一句话似乎也帮不上太多忙,多看,多学,多想,很快你会理解这简单一句话的博大精深的。
都有属性和方法动物狗 extends 动物
杂种狗 extends 狗动物 小黄 =new 杂种狗();