详述:Java多态
用eclipse举例,先创建一个Java project ,再创建以下三个类:
第一个类
/**
哺乳动物类
*/
public class Mammal(){
public void move(){
System.out.println("可以移动。。。。");
}
}
第二个类
//鲸鱼类
public class whale(){
public void Whale extends Mammal(){
System.out.println("靠鳍运动");
}
}
第三个类
public class Ocean(){
`public static void main(String[] args) {
Whale whale = new Whale(); //子类类型的变量执行子类创建的对象
whale.move();
System.out.println(whale); //地址相同
System.out.println("````````````");
Mammal mammal = whale; //父类类型的变量指向子类创建的对象
mammal.move();
System.out.println(mammal); //地址相同
}
//多态:代码执行前是执行父类的方法,代码执行时是执行子类的方法
//编译时类型与运行类型不一致,不一定出现多态,但一致一定不会出现多态
上述中第三个类中whale.move();和mammal.move(); 执行结果相同,因为whale中储存的是地址,而在后面,将whale的地址赋值给了mammal,mammal也指向了whale所指的对象地址,所以输出结果相同。
Java引用变量有两种类型,分别是编译时类型和运行时类型,编译时类型由声明该变量时使用的类型决定;运行时类型由实际赋给变量的对象,如果编译时类型和运行时类型不一致,就可能出现多态。就如同上述代码中所看到的,编译时,mammal.move();指向父类的Mammal中的方法,而运行时指向了子类的whale.move();方法,所以就形成了多种形态,成为多态。