黑马程序员技术交流社区

标题: 关于猫跳高、狗跳高习题 [打印本页]

作者: 黑马嗨嗨嗨    时间: 2016-12-27 14:51
标题: 关于猫跳高、狗跳高习题
已知动物类(姓名,年龄,吃饭,睡觉),它有两个子类,分别是猫类和狗类。
                不同的是猫吃鱼,狗吃肉。
                经过马戏团的培训后,部分猫会跳高,部分狗也会跳高。
我这么写对么?
class animals
{
        String name;
        int age;
        void eat()
        {
                System.out.println(name+"..."+age+"。。。吃饭。。。");
        }
        void sleep()
        {
                System.out.println(name+"..."+age+"。。。睡觉。。。");
        }
}
interface Jump
{
        public abstract void jump();
}
class cat extends animals
{
        void eat()
        {
                System.out.println(name+"..."+age+"。。。猫吃鱼。。。");
        }
}
class dog extends animals
{
        void eat()
        {
                System.out.println(name+"..."+age+"。。。狗吃肉。。。");
        }
}
class aLittleCat extends cat implements Jump
{
        public void jump()
        {
                System.out.println(name+"..."+age+"。。。猫跳高。。。");
        }
}
class aLittleDog extends dog implements Jump
{
        public void jump()
        {
                System.out.println(name+"..."+age+"。。。狗跳高。。。");
        }
}
class Day09
{
        public static void main(String[] args)
        {
                cat a = new aLittleCat();//送去马戏团学跳高
                cat b = new cat();
                dog c = new aLittleDog();//送去马戏团学跳高
                dog d = new dog();
                a.name="cata";
                b.name="catb";
                c.name="dogc";
                d.name="dogd";
                a.age=2;
                b.age=5;
                c.age=4;
                d.age=3;
                a.sleep();
                b.sleep();
                c.sleep();
                d.sleep();
                a.eat();
                b.eat();
                c.eat();
                d.eat();
                aLittleCat q=(aLittleCat) a;//部分猫学会跳高
                q.jump();
                aLittleDog w=(aLittleDog) c;//部分狗学会跳高
                w.jump();
        }
}


作者: 一片叶~    时间: 2017-1-1 08:30
建议最好将Animal 类定义成抽象类,成员私有化,使用构造方法赋值更简洁
作者: gczsjj    时间: 2017-1-12 22:00
不对,因为猫和狗吃饭睡觉不同,建议在Animal类中定义为抽象类。参考代码如下:

abstract class Animal {
        private String name;
        private int age;
        public Animal() {}                                                                                                        //无参构造方法
        public Animal(String name,int age) {
                this.name = name;
                this.age = age;
        }
        //抽象方法吃饭eat()
        public abstract void eat();
        //抽象方法睡觉sleep()
        public abstract void sleep();
}
interface Jump {
        //jump()
        public abstract void jump();
}
//猫类
class Cat extends Animal {
        public Cat() {}
        public Cat(String name,int age) {
                super(name,age);
        }
        public void eat() {
                System.out.println("猫吃鱼");
        }
        public void sleep() {
                System.out.println("猫侧身睡.");
        }
}
//狗类
class Dog extends Animal {
        public Dog() {}
        public Dog(String name,int age) {
                super(name,age);
        }
        public void eat() {
                System.out.println("狗吃肉");
        }
        public void sleep() {
                System.out.println("狗趴着睡.");
        }
}
//跳高猫
class JumpCat extends Cat implements Jump {
        public JumpCat() {}
        public JumpCat(String name ,int age) {
                super(name,age);
        }
        public void jump() {
                System.out.println("跳高猫跳高.");
        }
}

//跳高狗
class JumpDog extends Dog implements Jump {
        public JumpDog() {}
        public JumpDog(String name ,int age) {
                super(name,age);
        }
        public void jump() {
                System.out.println("跳高狗跳高.");
        }
}

作者: Rhwan    时间: 2017-1-13 12:07
动物工厂

作者: guyouzhong    时间: 2017-1-22 09:13
可以用工厂方法类去实现呀




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