对多态的理解

所谓多态

多态指的是程序中定义的引用变量所指向的具体类型和通过该引用对象调用的方法在编程时并不确定,而是在程序运行期间才确定。这样,不用修改原程序代码,就可以让引用变量绑定到不同的类实现上,从而导致该引用调用的具体方法随之改变。即不修改程序就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性
多态,也叫做动态绑定,分离了做什么怎么做,也就是说多态将接口实现分离开来。

具体实例

假设有个动物类Animal,有个eat()方法

class Animal{
  void eat(){ }
}

这个Animal就是父类,现在有一些继承它的子类,分别对eat()进行了覆盖

class Dog extends Animal{
  void eat(){
    System.out.println("Eat bones" );
  }
}
class Cat extends Animal{
  void eat(){
    System.out.println("Eat fish" );
  }
}
class Sheep extends Animal{
  void eat(){
    System.out.println("Eat grass" );
  }
}

现在三种小动物都有自己的eat方法了,我想让每种小动物都吃一口东西,可以这样写:

Dog dog = new Dog();
dog.eat();
Cat cat = new Cat();
cat.eat();
Sheep sheep = new Sheep();
sheep.eat();

这时候新加了一种小动物chicken,这时候我们需要再去new一个chicken。虽然也可以,但是每次新加都要新改代码很麻烦,于是我们就可以用到多态,首先我们需要理解什么叫做向上转型,在继承中,我们知道子类是父类的拓展,如果我们定义了一个指向子类的父类引用类型,那么它除了可以引用父类的共性,还可以使用子类强大的功能。当然它不能调用只存在于子类中的属性和方法。
那么现在想要实现dog.eat()我们还可以这样用:

Animal a = new Dog();
a.eat();

于是我们可以这样做:

Animal[] ani = new Animal[3];
ani[0] = new Dog();
ani[1] = new Cat();
ani[2] = new Sheep();

写成for循环就是:

for (int i = 0; i<3;i++){
  ani[i].eat();}

运行结果同样是:

Eat bones
Eat fish
Eat grass
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、继承 当两个事物之间存在一定的所属关系,即就像孩子从父母那里得到遗传基因一样,当然,java要遗传的更完美,这...
    玉圣阅读 1,074评论 0 2
  • 父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Ca...
    木有鱼丸啦阅读 900评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 1.面向对象三大特性 -封装性 -继承性 -多态性 2.什么是封装 封装性就是隐藏实现细节,仅对外公开接口。 3....
    梦夜繁星阅读 1,118评论 0 6
  • 昨天晚上玩得真开心。是我上大学以来最快乐的一个晚上了,在那里你感觉得到身边的对你充满了善意与真诚。真的非常感谢羽协...
    你好手动逗号绿光阅读 82评论 0 0