您的位置:首页 > 编程语言 > Java开发

面向对象三大特性之多态(polymorphism)

2018-03-10 16:46 239 查看
1、多态的基本概念

  多态是Java面向对象编程中最重要的特性之一,比封装和继承稍微难一点,所谓多态其实就是指对象具有多种形态,对象可以存在不同的形式。因为有jvm虚拟机,所以在编译时不用考虑真实的对象,运行时才考虑,换句话说就是程序的最终状态只有在执行过程中才被决定而不是在编译期间就决定了的。

  举个简单的栗子:写一个Animal类、Dog类、Cat类,再写一个测试类TestDemo

public class Animal {
public void eat() {
System.out.println("动物需要吃东西!");
}
}


class Dog extends Animal {
public void eat(){
System.out.println("狗狗吃骨头!");
}
}


class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
}


没有使用多态的TestDemo类:

Public class TestDemo{
public static void main(String[] args){
Dog d = new Dog();
d.eat();
Cat c = new Cat();
c.eat();
}
}


使用了多态的TestDemo类:

Public class TestDemo{
public static void main(String[] args){
Animal a1 = new Dog();  //父类引用指向子类对象
a1.eat();
Animal a2 = new Cat();
a2.eat();
}
}


  我们知道引用变量(对象)的有两种类型:一是编译时类型,由声明的类型决定;二是运行时类型,由实际对应的对象类型决定。通过上面的代码不难发现,编译时类型必须是运行时类型的父类或者相同,而当编译时类型是运行时类型的父类的时候,即Animal a1 = new Dog() ; 多态就产生了。

2、多态产生的三个必要条件

要有继承;

要有方法重写;

父类引用指向子类对象 。

3、多态的优点

  使用多态可以利用父类类型屏蔽子类之间的差异,所有的子类对象都可以当父类对象来用,一个父类类型的引用可能指向的是一个子类对象,提高代码的灵活性和通用性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息