A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马嗨嗨嗨 高级黑马   /  2016-12-27 14:51  /  2354 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

已知动物类(姓名,年龄,吃饭,睡觉),它有两个子类,分别是猫类和狗类。
                不同的是猫吃鱼,狗吃肉。
                经过马戏团的培训后,部分猫会跳高,部分狗也会跳高。
我这么写对么?
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();
        }
}

4 个回复

倒序浏览
建议最好将Animal 类定义成抽象类,成员私有化,使用构造方法赋值更简洁
回复 使用道具 举报
不对,因为猫和狗吃饭睡觉不同,建议在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("跳高狗跳高.");
        }
}
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
可以用工厂方法类去实现呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马