天天看点

今天和大家来说说下多态

首先引入一个问题,什么是多态,所谓的 多态从字面意思的理解就是多种状态.多态在我们的生活里面是到处存在的。

比如比如一个很简单的比方,就拿休息的方法来说,普通的人休息就是睡一觉,程序员休息就是ixie几行代码。等等

或出现不同的形式。多要就像一个函数,当输入不同的参数,会得到不同的结果。下面我们来看看代码来理解下什么是多态

package TestModefine;

/**
 * @author hackbase  多态的测试必须满足三个条件
 * 1.必须要又继承
 * 2.必须重写父类的方法
 * 3.父类的引用必须指向子类的对象
 * 下面我们来看看代码.
 */
public class Demo {
    public static void main(String[] args) {
        //一般动物交了一声
        Animal d=new Animal();
        AnimalShutCry(d);
        //当我们传递一个狗进去的时候,就会出现狗叫
        Animal d2=new Dog();
        AnimalShutCry(d2);
        //当我们传递一个猫进去的时候,会自动的出现猫叫的现象/
        Animal d3=new Cat();
        //自动向上转型。
        AnimalShutCry(d3);

        //向下转型.
        Dog b=(Dog)d2;
        //强制向下转型.




    }
     static   void AnimalShutCry(Animal T){
        T.shut();
    }

    static class Animal{
        public void shut(){
            System.out.println("叫了一声");
        }
    }

    static class Dog extends Animal{
        @Override
        public void shut(){
            System.out.println("汪汪汪的叫了一声.......");
        }
    }

    static class Cat extends Animal{
        @Override
        public void shut() {
            System.out.println("喵喵的叫了一声......");
        }
    }
}
           

上面的代码说的很i清楚,多态必须满足三个条件1.又继承的关系。2.重写了父类的方法。3.父类的引用必须指向子类的一个对象.

着三个条件却不可.  主要看看下面的代码.

static   void AnimalShutCry(Animal T){
        T.shut();
    }
           

上面代码才是多态的关键,在方法的参数里面,我们定义了一个父类的引用,当我们传入不同的子类的时候JVM会根据不同的子类调用不同的方法。来看看代码输出的的结果。

public static void main(String[] args) {
        //一般动物交了一声
        Animal d=new Animal();
        AnimalShutCry(d);
        //当我们传递一个狗进去的时候,就会出现狗叫
        Animal d2=new Dog();
        AnimalShutCry(d2);
        //当我们传递一个猫进去的时候,会自动的出现猫叫的现象/
        Animal d3=new Cat();
        //自动向上转型。
        AnimalShutCry(d3);

        //向下转型.
        Dog b=(Dog)d2;
        //强制向下转型.




    }
           

当我们传递不同的动物进去的时候,JVM就会调用不同的方法,从而输出不同的结果。着就是多态

继续阅读