黑马程序员技术交流社区

标题: 预习多态中,随便写了个小程序,感觉不满意....... [打印本页]

作者: huwenkai87    时间: 2015-12-8 22:22
标题: 预习多态中,随便写了个小程序,感觉不满意.......
同学们看看能给优化下吗?名字不能直接一样吗?

class Demo {
        public static void main(String[] args) {
                Animal a = new Cat("加菲",8);
                Animal b = new Dog("八公",4);
               
                change(a);
                change(b);
               
        }
        public static void change(Animal a){
                a.eat();
                if (a instanceof Cat) {
                        Cat c = (Cat)a;
                        c.catchMouse();
                }else if (a instanceof Dog) {
                        Dog d = (Dog)a;
                        d.lookHome();
                }
        }
}
class Animal {
        private String name;
        private int age;

        public Animal(){}
        public Animal(String name,int age){
                this.name = name;
                this.age = age;
        }
        public void setName(String name) {
                this.name = name;
        }
        public String getName (){
                return name;
        }
        public void setAge(int age) {
                this.age = age;
        }
        public int getAge (){
                return age;
        }
        public void eat(){
                System.out.println("吃东西");
        }

}
class Cat extends Animal {
        public Cat(){}
        public Cat(String name,int age){
                super(name,age);
        }
        public void eat(){
                System.out.println(getName()+"吃鱼");
        }
        public void catchMouse(){
                System.out.println(getName()+"抓老鼠"+getAge()+"年.");
        }
}
class Dog extends Animal {
        public Dog(){}
        public Dog(String name,int age){
                super(name,age);
        }
        public void eat(){
                System.out.println(getName()+"吃肉");
        }
        public void lookHome(){
                System.out.println(getName()+"看门"+getAge()+"年.");
        }
}
作者: LSD-ZWH    时间: 2015-12-8 22:30
支持一下,助攻已到
作者: geektosages    时间: 2015-12-8 23:07
顶贴!!
作者: huwenkai87    时间: 2015-12-8 23:42
LSD-ZWH 发表于 2015-12-8 22:30
支持一下,助攻已到

谢了哥们
作者: huwenkai87    时间: 2015-12-8 23:43
geektosages 发表于 2015-12-8 23:07
顶贴!!

努力努力
作者: 李永佳    时间: 2015-12-9 16:28
Animal a = new Cat("加菲",8);这两句话中,直接写Cat cat = new Cat("加菲",8); 就可以吧。多态体现在change传参数的时候,没必要再之前就定义多态吧
作者: wei_john    时间: 2015-12-9 17:45
李永佳 发表于 2015-12-9 16:28
Animal a = new Cat("加菲",8);这两句话中,直接写Cat cat = new Cat("加菲",8); 就可以吧。多态体现在cha ...

多态的前提了:
1.要有关系
2.要有父类引用指向子类对象
作者: 高云    时间: 2015-12-9 18:13
加油。。。
作者: 梦我天堂    时间: 2015-12-9 18:17
我来刷分。。。。。。
作者: 1424467864    时间: 2015-12-9 18:20
LSD-ZWH 发表于 2015-12-8 22:30
支持一下,助攻已到

悄悄流过,支持一下
作者: geektosages    时间: 2015-12-9 23:42
加油!
作者: 李永佳    时间: 2015-12-10 16:47
wei_john 发表于 2015-12-9 17:45
多态的前提了:
1.要有关系
2.要有父类引用指向子类对象

将参数cat 传递给Animal的时候,相当于 Animal animal = new Cat()了,单独定义Animal animal = new Cat这两句话实在多余
作者: wei_john    时间: 2015-12-11 11:10
李永佳 发表于 2015-12-10 16:47
将参数cat 传递给Animal的时候,相当于 Animal animal = new Cat()了,单独定义Animal animal = new Cat ...

调用方法和new对象根本不搭嘎。
你这是强行多余好嘛!!!
虽然在调用方法可以向上转型,但是跟new对象的时候又有什么关系呢!!!


作者: geektosages    时间: 2015-12-12 21:59
再顶!
作者: 我住隔壁我姓王    时间: 2015-12-12 22:19
不错不错  助攻一个
作者: DayBreak    时间: 2015-12-12 22:23
要变量b何用..
作者: 李永佳    时间: 2015-12-14 16:15
wei_john 发表于 2015-12-11 11:10
调用方法和new对象根本不搭嘎。
你这是强行多余好嘛!!!
虽然在调用方法可以向上转型,但是跟new对象的 ...

class Demo {
        public static void main(String[] args) {
                change(new Cat("加菲",8));
                change(new Dog("八公",4));
               
        }
        public static void change(Animal a){
                a.eat();
                if (a instanceof Cat) {
                        Cat c = (Cat)a;
                        c.catchMouse();
                }else if (a instanceof Dog) {
                        Dog d = (Dog)a;
                        d.lookHome();
                }
        }
}
class Animal {
        private String name;
        private int age;

        public Animal(){}
        public Animal(String name,int age){
                this.name = name;
                this.age = age;
        }
        public void setName(String name) {
                this.name = name;
        }
        public String getName (){
                return name;
        }
        public void setAge(int age) {
                this.age = age;
        }
        public int getAge (){
                return age;
        }
        public void eat(){
                System.out.println("吃东西");
        }

}
class Cat extends Animal {
        public Cat(){}
        public Cat(String name,int age){
                super(name,age);
        }
        public void eat(){
                System.out.println(getName()+"吃鱼");
        }
        public void catchMouse(){
                System.out.println(getName()+"抓老鼠"+getAge()+"年.");
        }
}
class Dog extends Animal {
        public Dog(){}
        public Dog(String name,int age){
                super(name,age);
        }
        public void eat(){
                System.out.println(getName()+"吃肉");
        }
        public void lookHome(){
                System.out.println(getName()+"看门"+getAge()+"年.");
        }
}


这样足够了。
作者: 队长别开枪是我    时间: 2015-12-14 16:26
所以有什么不满意的?想把代码缩成一行?




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