首先引入一个问题,什么是多态,所谓的 多态从字面意思的理解就是多种状态.多态在我们的生活里面是到处存在的。
比如比如一个很简单的比方,就拿休息的方法来说,普通的人休息就是睡一觉,程序员休息就是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就会调用不同的方法,从而输出不同的结果。着就是多态