黑马程序员技术交流社区

标题: 这段学习多态感觉挺难的 [打印本页]

作者: MrKing    时间: 2015-7-21 18:01
标题: 这段学习多态感觉挺难的
多态感觉是一个比较重要的东西,面向对象中的三个模块之一,求大神指教多态到底有啥用真心搞不懂?
作者: 徐会会    时间: 2015-7-21 19:44
我也来学习一下
作者: lishang    时间: 2015-7-21 19:48
同求,感觉总是想不到什么时候会用到
作者: 技术人生    时间: 2015-7-21 20:18
多态就是父类应用指向子类对象,在父类中定义一个公共方法,在子类中重写,可实现方法的灵活调用,减少代码量,且易维护
作者: rxtm    时间: 2015-7-21 22:21
我是会用,但是想不起来那是个啥
作者: 辉大大    时间: 2015-7-21 23:32
你只需记住怎么用就可以了,平时都不怎么用;
你要了解它的的用法  它主要特点就是易维护性和扩展性
所谓的易维护性和扩展性,就是在于它将很多对象调用的相同方法,封装在一个方法中便于维护;
我这样理解的

作者: MrKing    时间: 2015-7-22 19:21
徐会会 发表于 2015-7-21 19:44
我也来学习一下

学习多久了?
作者: MrKing    时间: 2015-7-22 19:22
lishang 发表于 2015-7-21 19:48
同求,感觉总是想不到什么时候会用到

确实是感觉没有头绪,对了,你的技术分怎么得到的?
作者: MrKing    时间: 2015-7-22 19:24
技术人生 发表于 2015-7-21 20:18
多态就是父类应用指向子类对象,在父类中定义一个公共方法,在子类中重写,可实现方法的灵活调用,减少代码 ...

大兄弟,你说的是定义和注意用法,可是在现实使用上确实不是那么好区分的
作者: MrKing    时间: 2015-7-22 19:25
rxtm 发表于 2015-7-21 22:21
我是会用,但是想不起来那是个啥

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

平时不用吗?不会吧,面向对象三个模块多态继承和封装不是挺重要的?
作者: 徐会会    时间: 2015-7-22 19:44
MrKing 发表于 2015-7-22 19:21
学习多久了?

还没进去呢
作者: rxtm    时间: 2015-7-22 19:50
MrKing 发表于 2015-7-22 19:25
好吧,大哥,那个多态到底是啥时候用的呢?

反正用到的时候会写,但是你要问我啥时候用,我还真说不出来
作者: Y1011    时间: 2015-7-22 21:30
都是晕过来的,晕才说明你认真学了
作者: 胡家兵    时间: 2015-7-22 21:34
/*
        多态的好处:
                为了提高代码的扩展性和可维护性。
*/
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();
        }
        */
}
希望你能看的懂,有的注释掉了意思就是那样可以是可以但是麻烦于是换其他方法,也就是多态来解决,不当面不好讲.希望你看的懂
作者: 白马程序猿    时间: 2015-7-22 21:38
同求,不知道什么时候用
作者: 辉大大    时间: 2015-7-22 21:43
MrKing 发表于 2015-7-22 19:30
平时不用吗?不会吧,面向对象三个模块多态继承和封装不是挺重要的?

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

黑马币可以兑换技术分的,6黑马币兑换1技术分
作者: 康恒强    时间: 2015-7-22 22:38
飘过飘过
作者: spike_az    时间: 2015-7-22 22:47
后排学习!
作者: 谢永烽    时间: 2015-7-22 22:47
理解,慢慢学着后面去
作者: 人造番茄    时间: 2015-7-22 23:08
第一次看多态的时候,就凌乱了
作者: MrKing    时间: 2015-7-25 17:58
lishang 发表于 2015-7-22 22:11
黑马币可以兑换技术分的,6黑马币兑换1技术分

在那里换啊?求链接
作者: zhi4578120    时间: 2015-7-25 19:07
我也刚学完这块,写作业没问题,考试也还行,就是自我感觉对面向对象这一块还是不懂,没有把知识点连起来。
作者: 陈建民1    时间: 2015-7-25 19:16
Fu f=new Zi(),子类继承父类,通过父类引用指向子类对象。。大概就是这个意思。
作者: 刘远东    时间: 2015-7-25 20:12
是挺难的啊多态, 但是前面学不好,后面就好像听天书似的,所以还是要加油学
作者: 仨儿先森    时间: 2015-7-25 21:11
入门容易进阶难哦
作者: 官沛    时间: 2015-7-25 21:17
其实关键是多敲代码,
同时自己要有效总结
敲多了自然融会贯通,
知道为什么会搞出这个概念出来
作者: chad8753    时间: 2015-7-25 21:28
加油,,,,,,,,
作者: 晨曦遇晓    时间: 2015-7-25 21:32
恩 主要是转型的时候要注意下 向上和向下转型
作者: 袁月明    时间: 2015-7-25 21:35
慢慢来,学到后面你就会有头绪一点
作者: 李工    时间: 2015-7-25 21:42
技术人生 发表于 2015-7-21 20:18
多态就是父类应用指向子类对象,在父类中定义一个公共方法,在子类中重写,可实现方法的灵活调用,减少代码 ...

很有道理
作者: lishang    时间: 2015-7-25 22:37
MrKing 发表于 2015-7-25 17:58
在那里换啊?求链接

黑马论坛版块界面,左上方论坛版块下有一个蓝色字体的“黑马币兑换积分通道”,点进去就是了,6黑马币兑换1技术分。
作者: 木森    时间: 2015-7-25 23:00
不难的 加油 多看看视频 打打练习,问问别人
作者: 叫什么    时间: 2015-7-25 23:44
确实 不知道什么时候要用
作者: MrKing    时间: 2015-7-26 22:24
叫什么 发表于 2015-7-25 23:44
确实 不知道什么时候要用

你技术分咋得的?
作者: 叫什么    时间: 2015-7-29 17:46
回帖用黑马币兑换的
作者: 一城一世界    时间: 2015-7-29 17:52
好多概念~头疼…
作者: boboyuwu    时间: 2015-7-29 22:23
胡家兵 发表于 2015-7-22 21:34
/*
        多态的好处:
                为了提高代码的扩展性和可维护性。

一堆废话没一句亮点  结尾也没突出主题
作者: 天地一沙鸥    时间: 2015-7-29 22:33
牢记住多态的前提:
  A:要有继承或者实现
  B:要有父类引用指向子类对象
  C:一般要有方法重写,否则多态就没有意义。
然后结合例子去思索一下。
作者: wy8215866    时间: 2015-7-29 22:36
!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: boboyuwu    时间: 2015-7-29 23:05
袁月明 发表于 2015-7-25 21:35
慢慢来,学到后面你就会有头绪一点

美女好漂亮,能交个朋友吗
作者: 胡家兵    时间: 2015-7-30 19:33
boboyuwu 发表于 2015-7-29 22:23
一堆废话没一句亮点  结尾也没突出主题

对的,我是水贴的,你看其他人的,其他人说的好




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