java吧 关注:1,255,047贴子:12,743,404

java面试题

只看楼主收藏回复

请根据面向对象编程思想, 对ATM机, 储户,窃贼三类对象进行抽象(java语言).
说明:
1. 储户可以凭账号及密码从ATM机中取钱
2. 窃贼可以通过自己掌握的本领取钱(如小偷可以开锁偷钱, 强盗可以使用暴力破坏ATM机后拿钱)
3. ATM会停止服务(如钱已被储户取完, 或被破坏不能使用)
最近在招人, 于是随便想了个题目考验下面试者的OO知识, 不过貌似没有人答的出来.
初学者看看, 难道这个题目太难了吗?
老鸟们求不捣乱, 给小朋友们传递错误的信息就不好了, 谢谢!


IP属地:上海1楼2015-06-01 14:26回复
    我上个月31号才开始学习JAVA,你说的是什么感觉好难。hello world


    IP属地:广东2楼2015-06-01 14:30
    收起回复
      so easy


      IP属地:广东来自Android客户端3楼2015-06-01 14:35
      收起回复
        people —getmoney抽象类,子类储户和窃贼。
        atm—stopservice


        来自手机贴吧4楼2015-06-01 14:42
        收起回复
          楼主哪的,我20号去北京找工作,java web。


          来自手机贴吧5楼2015-06-01 14:44
          回复
            类atm,atm内部类帐户信息。类people,接口盗窃。


            IP属地:广东来自Android客户端6楼2015-06-01 15:14
            收起回复
              太抽象……不一定是不会,而是无法理解其表达的意思,好吧其实我就是一下没明白意思,看了6楼才知道……题目的意思,


              IP属地:阿联酋来自Android客户端7楼2015-06-01 15:27
              收起回复
                我想问难点在哪里,随便几个方法,说得你天花乱坠


                IP属地:四川来自iPhone客户端8楼2015-06-01 16:07
                收起回复
                  好难~


                  IP属地:上海10楼2015-06-01 16:12
                  回复
                    ATM --类;
                    储户和窃贼 -- 对象;
                    账号密码-- static 类成员变量;
                    窃贼 手段--方法;
                    人和窃贼调用 static类成员变量;
                    循环三次
                    ATM 停止!


                    11楼2015-06-01 16:17
                    回复
                      非初学者表示太简单。但是不同人会给出不同解法。
                      用户就是调用
                      小偷用反射
                      实际上强盗是最难写的,强盗可以主动破坏atm,但atm不可能设置一个方法“被破坏”。而反射的话完全可以不破坏。所以应当有这样几层
                      ATM接口,ATMImpl实现,ATMService提供关于钱的服务,不涉及权限验证,强盗直接从ATMImpl里拿出ATMService,并且设为空。
                      这样,小偷就是反射出两个类,取钱。强盗要是砸了,那么小偷也拿不出任何东西。
                      用户调用接口给出方法。


                      IP属地:江苏来自Android客户端12楼2015-06-01 16:27
                      收起回复
                        纯面向对象来描述业务问题会有一个难题,就是不可避免的会面对系统中纯技术描述的问题解决方法的"上帝之手".这个问题我思考了很久,目前也没有找到合适的方法解决.
                        比如取钱这个事.我们可以如下描述:
                        人.取钱(机器){
                        人.输入(机器,this.脑子中的用户名密码)
                        if(机器.显示("通过"){
                        人.输入(机器,金额);
                        ....
                        }
                        }
                        也可以这么写
                        服务.取钱(用户,机器){
                        if(机器checkPass(用户.name,用户.pass){
                        ....
                        用户.现金 += 金额
                        }
                        }
                        无疑,前一种更符合我们想象中的面向对象(以用户视角来观察行为),而后一种,往往才是大家最常用的写法(以第三者或者上帝的视角).
                        这两种哪种更好?欢迎讨论.


                        IP属地:北京13楼2015-06-01 16:58
                        收起回复
                          水水 更健康


                          14楼2015-06-01 17:26
                          回复
                            貌似,我只会正常调用


                            IP属地:重庆来自Android客户端16楼2015-06-01 19:36
                            回复
                              楼主考的是面向对象吧?


                              IP属地:广东来自Android客户端17楼2015-06-01 19:42
                              回复