温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java面向对象之如何使用多态

发布时间:2021-10-23 14:45:24 来源:亿速云 阅读:171 作者:iii 栏目:开发技术

这篇文章主要讲解了“Java面向对象之如何使用多态”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java面向对象之如何使用多态”吧!

目录
  • 一、前言

  • 二、什么是多态?

  • 三、多态的实现条件

  • 四、多态的访问特点

    • 1.我们建一个service包放Animal类

    • 2.再servic包下建一个impl包,包下放Cat类

    • 3.我们在建一个controller包,在里面建一个动物测试类

    • 4.弄完之后我们程序一运行

      •  4.1为什么两个有区别呢?

  • 五、多态的优点和缺点?

    • 六、为什么要分开建包

      一、前言

      前面我们了解和学习了继承的使用,现在我们来学习三大面向对象之一的多态。

      多态使java面向对象丰富起来,所以学好多态十分重要。

      二、什么是多态?

      这个问题其实是显然的,从字面上看,也是多种状态,其实没错,多态就是在

      不同情况表现出来的不同状况,叫多态。

       比方说我们可以说,?是水果,也可以说,?是? ((华强买??)

      是动物,也可以说,?是?(有人可能会问这是什么??)

      ?这里西瓜和牛有两种不同状态,这个就是多态。

      三、多态的实现条件

      • ?①有(继承/实现)关系

      • ?②有方法重写

      • ?③有(父类/接口)引用指向(子类/实现)对象

      解读

      • ?①有(继承/实现)关系(说明这里有子类父类或者接口的实现)

      • ?② 有方法的重写(重写抽象方法,或者重写父类中的方法) 

      • ? ③有(父类/接口)引用指向(子类/实现)对象(说明有父类/接口 对象名= new 子类/实现 )

      四、多态的访问特点

      • ?成员方法:编译看左边,执行看右边

      • ?成员变量:编译看左边,执行看左边

      解读:①所谓编译看左边,就是在语法问题上,看new的左边(父类或者接口)

      有没有此方法或者变量, 如果有则编译通过,反之则不通过

      ② 执行就是最终结果看,比如,在方法中执行时看右边就是看new的右边,

      就是说 对象调用的时候,子类和父类都有此方法时,以子类中的方法为结果。

      接口我们这篇未涉及到,所以这次我们用继承的方式类实现多态。

      1.我们建一个service包放Animal类

      package service;
       
      public class Animal {
          public String name="动物";
          public void eat(){
              System.out.println("动物吃东西");
          }
          public void sleep(){
              System.out.println("动物要?");
          }
      }

      2.再servic包下建一个impl包,包下放Cat类

      因为我们要继承Animal类,而Animal在与之不再 同一个包所以需要导包(导包就是

      告诉程序我要用的这个在哪里)

      package service.impl;
       
      import service.Animal;//导包
       
      public class Cat extends Animal {
          public String name="猫";
          @Override
          public void eat() {//重写父类的方法
              System.out.println("?吃?");
          }
          public void play(){
              System.out.println("?玩毛球");
          }
      }

      3.我们在建一个controller包,在里面建一个动物测试类

      import service.Animal;//导包
      import service.impl.Cat;
       
      public class AnimalController {
          public static void main(String[] args) {
                 //多态创建对象
              Animal a=new Cat();//父类引用指子类对象
              a.eat();
              a.sleep();
              System.out.println("名字:"+a.name);
          }
      }

      4.弄完之后我们程序一运行

      如图:

      Java面向对象之如何使用多态

       看结果,可以知道,方法的编译看做左边,执行看右边,成员的编译看做左边,

      执行看左边也就是,在方法中,以子类方法为主,在变量上,以父类的变量为主。

      当父类有该方法,而子类没有该方法时,此时,结果时父类的方法。

       4.1为什么两个有区别呢?

      其实主要的原因时方法有重写,而成员变量则没重写(变量不能重写)

      五、多态的优点和缺点?

      •  ?多态的优点:是提高了扩展性,子类可以在父类的基础上进行扩展。

      •  ? 多态的缺点:就是不能访问子类的中的成员变量和成员方法。

      解决方法:后期涉及

      其实只要通过继承,实现时,子类所含有的方法是最多的,此时我们通过子类

      创建对象,就可以访问所有成员(非子类的私有成员除外)

      如图:

      Java面向对象之如何使用多态

      import service.Animal;
      import service.impl.Cat;
       
      public class AnimalController {
          public static void main(String[] args) {
       
              Cat c=new Cat();//通过子类创建对象
              c.eat();
              c.sleep();
              c.play();
              System.out.println("名字:"+c.name);
          }
      }

      六、为什么要分开建包

      ?有人不解,在同一个包下建就不用导包了,就没那么麻烦了,确实这话一点问题

      都没有,但是我们要养成这种开建包的好习惯,以便于在代码很多的时候,便于

      排查错误。因为写代码向来都是写时一时爽,找bug时满脸苦。为了防止这种情况

      我们要养成分开建包的好习惯。

      感谢各位的阅读,以上就是“Java面向对象之如何使用多态”的内容了,经过本文的学习后,相信大家对Java面向对象之如何使用多态这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

      向AI问一下细节

      免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

      AI