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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

MrKing

初级黑马

  • 黑马币:64

  • 帖子:38

  • 精华:0

© MrKing 初级黑马   /  2015-7-21 18:01  /  2311 人查看  /  42 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多态感觉是一个比较重要的东西,面向对象中的三个模块之一,求大神指教多态到底有啥用真心搞不懂?

42 个回复

倒序浏览
我也来学习一下
回复 使用道具 举报
同求,感觉总是想不到什么时候会用到
回复 使用道具 举报
多态就是父类应用指向子类对象,在父类中定义一个公共方法,在子类中重写,可实现方法的灵活调用,减少代码量,且易维护
回复 使用道具 举报 0 1
我是会用,但是想不起来那是个啥
回复 使用道具 举报
你只需记住怎么用就可以了,平时都不怎么用;
你要了解它的的用法  它主要特点就是易维护性和扩展性
所谓的易维护性和扩展性,就是在于它将很多对象调用的相同方法,封装在一个方法中便于维护;
我这样理解的
回复 使用道具 举报
MrKing 初级黑马 2015-7-22 19:21:35
7#

学习多久了?
回复 使用道具 举报
MrKing 初级黑马 2015-7-22 19:22:42
8#
lishang 发表于 2015-7-21 19:48
同求,感觉总是想不到什么时候会用到

确实是感觉没有头绪,对了,你的技术分怎么得到的?
回复 使用道具 举报
MrKing 初级黑马 2015-7-22 19:24:00
9#
技术人生 发表于 2015-7-21 20:18
多态就是父类应用指向子类对象,在父类中定义一个公共方法,在子类中重写,可实现方法的灵活调用,减少代码 ...

大兄弟,你说的是定义和注意用法,可是在现实使用上确实不是那么好区分的
回复 使用道具 举报
rxtm 发表于 2015-7-21 22:21
我是会用,但是想不起来那是个啥

好吧,大哥,那个多态到底是啥时候用的呢?
回复 使用道具 举报
辉大大 发表于 2015-7-21 23:32
你只需记住怎么用就可以了,平时都不怎么用;
你要了解它的的用法  它主要特点就是易维护性和扩展性
所谓的 ...

平时不用吗?不会吧,面向对象三个模块多态继承和封装不是挺重要的?
回复 使用道具 举报

还没进去呢
回复 使用道具 举报
rxtm 中级黑马 2015-7-22 19:50:40
13#
MrKing 发表于 2015-7-22 19:25
好吧,大哥,那个多态到底是啥时候用的呢?

反正用到的时候会写,但是你要问我啥时候用,我还真说不出来
回复 使用道具 举报
Y1011 中级黑马 2015-7-22 21:30:29
14#
都是晕过来的,晕才说明你认真学了
回复 使用道具 举报
/*
        多态的好处:
                为了提高代码的扩展性和可维护性。
*/
class Animal
{
        public void show()
        {
                System.out.println("show");
        }

        public void eat()
        {
                System. out.println("eat");
        }
}

class Cat extends Animal
{
        public void show()
        {
                System.out.println("show cat");
        }

        public void eat()
        {
                System. out.println("eat 老鼠");
        }
}

class Dog extends Animal
{
        public void show()
        {
                System.out.println("show dog");
        }

        public void eat()
        {
                System. out.println("eat 骨头");
        }
}

class Pig extends Animal
{
        public void show()
        {
                System.out.println("show pig");
        }

        public void eat()
        {
                System. out.println("eat 饲料");
        }
}

class AnimalTool
{
        private AnimalTool(){}

        /*
        public static void printDog(Dog d)
        {
                d.show();
                d.eat();
        }

        public static void printCat(Cat c)
        {
                c.show();
                c.eat();
        }

        public static void printPig(Pig p)
        {
                p.show();
                p.eat();
        }
        */
       
        public static void printAnimal(Animal a)
        {
                a.show();
                a.eat();
        }
}

class DuoTaiDemo5
{
        public static void main(String[] args)
        {
                //一开始,养了一只狗
                Dog d = new Dog();
                d.show();
                d.eat();
                //接着又养了一只狗
                Dog d2 = new Dog();
                d2.show();
                d2.eat();
                //继续养狗
                Dog d3 = new Dog();
                d3.show();
                d3.eat();
                System.out.println("-----------------------");
                //...养了很多只狗,我们就会发现一个问题,养的越多,代码的重复度越高。不好。
                //如何改进呢?思考,他们调用的功能,仅仅是由于对象不一样。所以,我们能不能把
                //每一个调用的整体封装一下呢,然后传递一个变化的对象即可呢?
                //改进版代码
                Dog d4 = new Dog();
                Dog d5 = new Dog();
                Dog d6 = new Dog();
                /*
                printDog(d4);
                printDog(d5);
                printDog(d6);
                */

                //使用工具类
                /*
                AnimalTool.printDog(d4);
                AnimalTool.printDog(d5);
                AnimalTool.printDog(d6);
                */

                AnimalTool.printAnimal(d4);
                AnimalTool.printAnimal(d5);
                AnimalTool.printAnimal(d6);

                System.out.println("-----------------------");
                //接着,改爱好了,喜欢猫了,那就开始养猫
                //基本养猫动作和基本养狗动作一样。
                //直接写改进版
                Cat c = new Cat();
                Cat c2 = new Cat();
                Cat c3 = new Cat();
                /*
                printCat(c);
                printCat(c2);
                printCat(c3);
                */
                //使用工具类
                /*
                AnimalTool.printCat(c);
                AnimalTool.printCat(c2);
                AnimalTool.printCat(c3);
                */
                AnimalTool.printAnimal(c);
                AnimalTool.printAnimal(c2);
                AnimalTool.printAnimal(c3);
                System.out.println("-----------------------");
                //后来,发展了,我喜欢宠物猪。
                //怎么办?
                //我要创建猪对象,并使用
                Pig p = new Pig();
                Pig p2 = new Pig();
                Pig p3 = new Pig();
                /*
                printPig(p);
                printPig(p2);
                printPig(p3);
                */
                //使用工具类
                /*
                AnimalTool.printPig(p);
                AnimalTool.printPig(p2);
                AnimalTool.printPig(p3);
                */
                AnimalTool.printAnimal(p);
                AnimalTool.printAnimal(p2);
                AnimalTool.printAnimal(p3);
                System.out.println("-----------------------");
                //到目前为止,有不好的地方。
                //比如说:测试类中应该只能有main方法。是不能有其他方法的。
                //为了保证不报错,我就得写一下方法。
                //重新定义一个工具类,实现输出效果。
                //宠物猪过时了,开始改养宠物狼。请问,要实现一样的效果,怎么办?

        }

        /*
        public static void printDog(Dog d)
        {
                d.show();
                d.eat();
        }

        public static void printCat(Cat c)
        {
                c.show();
                c.eat();
        }

        public static void printPig(Pig p)
        {
                p.show();
                p.eat();
        }
        */
}
希望你能看的懂,有的注释掉了意思就是那样可以是可以但是麻烦于是换其他方法,也就是多态来解决,不当面不好讲.希望你看的懂
回复 使用道具 举报
同求,不知道什么时候用
回复 使用道具 举报
MrKing 发表于 2015-7-22 19:30
平时不用吗?不会吧,面向对象三个模块多态继承和封装不是挺重要的?

你想想能用多态的,用子类对象也可以,何必用多态,除了那些特定的类啊这些,你只要记住怎么用就可以了,用多了就好了
回复 使用道具 举报
MrKing 发表于 2015-7-22 19:22
确实是感觉没有头绪,对了,你的技术分怎么得到的?

黑马币可以兑换技术分的,6黑马币兑换1技术分
回复 使用道具 举报
飘过飘过
回复 使用道具 举报
后排学习!
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马