前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象——多态

面向对象——多态

作者头像
木瓜煲鸡脚
发布2019-07-22 16:02:22
3180
发布2019-07-22 16:02:22
举报
文章被收录于专栏:Jasper小笔记

1.什么是多态

  • 一个对象有多种表示形态
  • 一个是表示自己的类型,还有表示自己父类的类型
代码语言:javascript
复制
Dog dog1 = new Dog();
Animal dog2 =new Dog(); //Dog对象也可以赋值给父类型变量来表示

2.多态的特点

  • 子类对象赋值给父类类型运行时,表现的是子类特征
  • 注意:

1.多态形式的特点展现是对重写方法,因为在编译时是找当前变量类是否有这个方法。上图Animal类型的变量去调用eat(),如果Animal中没有eat()编译不会通过会报错。编译通过之后,运行时就直接先在对象本身类Dog中去找找不到再到父类

2.字段没有多态形式,变量是什么类型就找到那个类的字段

3.静态也没有因为在还没有开始执行就加载到了方法区,直接就是变量的类来调用

3.多态的好处

  • 继承,方法的重写加上多态的表达使代码的扩展性大大提高。调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保重写方法编写正确,不用管原来的代码是如何调用的。
  • 没有使用多态的代码
代码语言:javascript
复制
pulic class Person{
  void feedDog(Dog dog){
    dog.eat();
   }
   void feedCat(Cat cat){
     cat.eat();
   }
   public static void main(String[] args){
      Person per = new Person();
      Dog dog = new Dog();
      per.feedDog(dog);
      
      Cat cat = new Cat();
      per.feedCat(cat);
   }
}
  • 使用多态后的代码
代码语言:javascript
复制
public class Person{
  void feedAnimal(Animal anim){
    anim.eat();
  }
  public static void main(String[] args){
    Person per = new Person();
    Animal dog - new Dog();
    
    Animal cat = new Cat();
    per.feedAnimal(cat);
  }
}
  • 通过父类接受各个类,执行时还是它们各个类重写的方法
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档