黑马程序员技术交流社区

标题: java把大象装进冰箱里 [打印本页]

作者: ToGame    时间: 2015-9-16 22:20
标题: java把大象装进冰箱里
今天为了理解面向对象,写了把大象装进冰箱里的Demo
原本的代码是这样的:
class ZhuanDaXiangDemo
{
        public static void main(String[] args)
        {
                Elephant e=new Elephant();
                Icebox ice=new Icebox();
                ice.open();
                e.in();
                ice.close();
        }
}

class Elephant
{
        public void in()
        {
                System.out.println("大象走进冰箱!!");
        }
}

class Icebox
{
       
        public void open()
        {
                System.out.println("打开冰箱门");
        }

        public void close()
        {
                System.out.println("关闭冰箱门");
        }
}

对于这段代码,我又深入的想了一下,刚开始,我觉得开门和关门的行为应该是由大象这个对象来完成的,不过很快就被推翻了,因为,如果我下次要装进去不是大象呢!我要装个狮子,那我岂不是在狮子类里又要写一个开关门的行为,这样重复代码就变多了,肯定不行!
因此,我又换了一种思维,门是冰箱的一个属性,开门关门则是改变这个属性的状态,那我是否可以用一个boolean型的门的属性,然后开关门便是改变门的状态,开为true关为false,这样的话,还可以防止出现重复开门或关门的状况,因此,我把代码改成了如下:

class  NewExplantIcebox
{
        public static void main(String[] args)
        {
                Explant ex=new Explant();
                Icebox ice=new Icebox();
                ice.changeDoor();
                ex.in();
                ice.changeDoor();
        }
}

class Explant
{
       
        //大象进冰箱
        public void in()
        {
                System.out.println("走进去");
        }
}

class Icebox
{
        //冰箱的门,默认为关闭
        boolean door=false;
        //改变门的状态
        public void changeDoor()
        {
                if(door)
                {
                        System.out.println("关冰箱门");
                }else
                {
                        System.out.println("开冰箱门");
                }
                door=!door;
        }
}


OK!!运行良好,(*^__^*) 嘻嘻……
虽然不是很深奥的问题,但能写下自己的思考过程也蛮开心的!!!




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