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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

同学们看看能给优化下吗?名字不能直接一样吗?

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()+"年.");
        }
}

17 个回复

正序浏览
所以有什么不满意的?想把代码缩成一行?
回复 使用道具 举报
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()+"年.");
        }
}


这样足够了。
回复 使用道具 举报
要变量b何用..
回复 使用道具 举报 1 0
不错不错  助攻一个
回复 使用道具 举报
再顶!
回复 使用道具 举报
李永佳 发表于 2015-12-10 16:47
将参数cat 传递给Animal的时候,相当于 Animal animal = new Cat()了,单独定义Animal animal = new Cat ...

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

回复 使用道具 举报
wei_john 发表于 2015-12-9 17:45
多态的前提了:
1.要有关系
2.要有父类引用指向子类对象

将参数cat 传递给Animal的时候,相当于 Animal animal = new Cat()了,单独定义Animal animal = new Cat这两句话实在多余
回复 使用道具 举报
加油!
回复 使用道具 举报
LSD-ZWH 发表于 2015-12-8 22:30
支持一下,助攻已到

悄悄流过,支持一下
回复 使用道具 举报
我来刷分。。。。。。
回复 使用道具 举报
高云 中级黑马 2015-12-9 18:13:06
8#
加油。。。
回复 使用道具 举报
李永佳 发表于 2015-12-9 16:28
Animal a = new Cat("加菲",8);这两句话中,直接写Cat cat = new Cat("加菲",8); 就可以吧。多态体现在cha ...

多态的前提了:
1.要有关系
2.要有父类引用指向子类对象
回复 使用道具 举报
Animal a = new Cat("加菲",8);这两句话中,直接写Cat cat = new Cat("加菲",8); 就可以吧。多态体现在change传参数的时候,没必要再之前就定义多态吧
回复 使用道具 举报
huwenkai87 来自手机 中级黑马 2015-12-8 23:43:27
报纸
geektosages 发表于 2015-12-8 23:07
顶贴!!

努力努力
回复 使用道具 举报
huwenkai87 来自手机 中级黑马 2015-12-8 23:42:17
板凳
LSD-ZWH 发表于 2015-12-8 22:30
支持一下,助攻已到

谢了哥们
回复 使用道具 举报
顶贴!!
回复 使用道具 举报
支持一下,助攻已到
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马