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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天涯海角 中级黑马   /  2013-8-9 09:35  /  1408 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多态的出现大大提高代码的扩展性,具体体现是什么

7 个回复

倒序浏览
   1,多态的体现
  父类的引用指向自己的子类对象
   父类的引用也可以接收自己的子类对象

   2,多态的前提
  必须是类与类之间有关系,要么继承 要么实现
通常还有一个前提:存在覆盖

所以说继承和实现接口都是多态的体现。。。你可以想一个原先有一个动物类,类中有一个吃的方法。但是你想动物肯定还有跑、走、叫等的方法吧。在不改变原代码的情况下。你自己再写一个类,继承了动物类,也就有个吃的方法,在你定义的类中你可以写跑、走、叫方法。不是对动物类的扩展吗?


回复 使用道具 举报
本帖最后由 小发 于 2013-8-9 10:32 编辑

请看下面代码
  1. public abstract class Animal {
  2.         public abstract void eat();
  3.         public void sleep(){
  4.                 System.out.println("睡觉");
  5.         }
  6. }
复制代码
  1. public class Cat extends Animal{

  2.         @Override
  3.         public void eat() {
  4.                
  5.                 System.out.println("吃鱼");
  6.         }
  7.         public void catchMouse(){
  8.                 System.out.println("抓老鼠");
  9.         }
  10. }
复制代码
  1. public class Dog extends Animal{

  2.         @Override
  3.         public void eat() {
  4.                 System.out.println("啃骨头");
  5.                
  6.         }
  7.         public void kanMen(){
  8.                 System.out.println("看门");
  9.         }

  10. }
复制代码
  1. public class DuoTai {
  2.         public static void main(String[] args) {

  3.                 function(new Cat());
  4.                 function(new Dog());
  5.         }
  6.         public static void function(Animal a){//这里利用多态的特性,提高代码的复用,提高了扩展性。
  7.                 a.eat();
  8.                 a.sleep();
  9.         }      
  10. }

  11. //
  12. public class DuoTai 1{
  13.     public static void main(String[] args) {

  14.         Cat c=new Cat();
  15.         c.catchMouse();
  16.         c.sleep();
  17.         
  18.         Dog d=new Dog();
  19.         d.kanMen();
  20.         d.sleep();
  21.         //如果不利用多态的特性那么就得一个一个new,一个一个调用,很麻烦。
  22.     }
  23.    
  24. }

复制代码
回复 使用道具 举报
扩展性么,简单就是在原有功能上增加新的功能。
说个例子,很多年前,播放器只有播放、暂停、停止功能。现在的播放器除了以上功能还能截图啊、快进啊等功能。
增加新出现的功能不要把原来代码全部修改掉,那样太烂了,工作量太大。
利用多态,通过继承啊实现啊覆盖什么的,在原代码基础上新增功能。不改原代码,有什么新功能就加上新功能方法,多方便。
回复 使用道具 举报
 多态的体现
  父类的引用指向自己的子类对象
   父类的引用也可以接收自己的子类对象

  多态的前提
  必须是类与类之间有关系,要么继承 要么实现
通常还有一个前提:存在覆盖

所以说继承和实现接口都是多态的体现。。。你可以想一个原先有一个动物类,类中有一个吃的方法。但是你想动物肯定还有跑、走、叫等的方法吧。在不改变原代码的情况下。你自己再写一个类,继承了动物类,也就有个吃的方法,在你定义的类中你可以写跑、走、叫方法。不是对动物类的扩展吗?

例:
public  class Animal {
               public   void eat(){
               
                 }

        public void sleep(){
                System.out.println("睡觉");
        }
}
复制代码
public class Cat extends Animal{

        @Override
        public void eat() {
               
                System.out.println("吃鱼");
        }
        public void catchMouse(){
                System.out.println("抓老鼠");
        }
}
复制代码
public class Dog extends Animal{

        @Override
        public void eat() {
                System.out.println("啃骨头");
               
        }
        public void kanMen(){
                System.out.println("看门");
        }

}
public class DuoTai {
        public static void main(String[] args) {

                function(new Cat());
                function(new Dog());
        }
        public static void function(Animal a){//这里接收的是父类,利用多态的特性,提高代码的复用,提高了扩展性。
                a.eat();
                a.sleep();
        }      
}

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
给你写个例子,你就知道了
  1. package wenti;
  2. //转型分向上转型 和向下转型;
  3. //写个例子:

  4. class wenti5{
  5.         public static void main(String[] args){
  6.                 Fu erzi = new Zi();//这是你如果要调用儿子的特有的方法,就必须向下转型
  7.                 Zi er =(Zi)erzi;
  8.                 er.erziteyou();
  9. //                至于为什么要向上转型是这样的,一般父类是一些大家共有的方法,现在我想让所有子
  10. //                类都做同样父类有的方法,而你每次执行的话创建对象,然后用对象一个一个调用写起来有些麻烦,
  11. //                所以,你可以考虑把父类的方法执行,封装成一个类中的静态方法,在传入参数的时候写父类的参数
  12. //                这样的好处是避免了代码重复。下面我写一个例子
  13.                 Fu fuDo = (Fu)er;//向上转型。为了调用function方法
  14.                 Fu nver =new daughter();
  15.                 function.fufunctionDo(fuDo);//执行父类方法
  16.                 function.fufunctionDo(nver);//执行父类方法
  17.         }
  18.        
  19. }
  20. class daughter extends Fu{
  21.         public  void nverteyou(){
  22.                 System.out.println("这方法女儿特有,爹爹没有");
  23.         }
  24.       public  void showzi(){
  25.              System.out.print("showzi");
  26.     }
  27.           public  void chi(){
  28.                 System.out.println("女儿chi");
  29.         }
  30.         public  void he(){
  31.                 System.out.println("女儿he");
  32.         }
  33.         public  void shui(){
  34.                 System.out.println("女儿shui");
  35.         }
  36. }
  37. class Fu{


  38.         public  void chi(){
  39.                 System.out.println("chi");
  40.         }
  41.         public  void he(){
  42.                 System.out.println("he");
  43.         }
  44.         public  void shui(){
  45.                 System.out.println("shui");
  46.         }
  47.     public  void showfu(){
  48.                 System.out.print("showfu");
  49.      }
  50. }
  51. class Zi extends Fu{
  52.                 public  void erziteyou(){
  53.                         System.out.println("这方法儿子特有,爹爹没有");
  54.                 }
  55.           public  void showzi(){
  56.                  System.out.print("showzi");
  57.         }
  58.               public  void chi(){
  59.                     System.out.println("zichi");
  60.             }
  61.             public  void he(){
  62.                     System.out.println("zihe");
  63.             }
  64.             public  void shui(){
  65.                     System.out.println("zishui");
  66.             }
  67. }
  68. class function{
  69.         public static void fufunctionDo(Fu fu){
  70.                 fu.chi();
  71.                 fu.he();
  72.                 fu.shui();
  73.         }
  74. }
复制代码
回复 使用道具 举报
简单体现就像人可以睡觉,可以吃饭,还可以打篮球,可以学习JAVA,可以学习.NET,多种形态必然提高扩展性啊!
回复 使用道具 举报
就单单多态实现了扩展性而言的话:当然是,一个类实现某个接口,或者一个类可以实现多个接口.
例子就不用给了,上面有哥们儿给了,挺经典的一个例子.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马