多态
是指同一个方法调用,由于对象不同可能会有不同的行为。
java中有两种多态:重载和重写
要点:
- 多态是方法的重写,不是属性的多态
- 多态存在的3个必要条件:继承、方法重写、父类引用指向子类对象
引用变量的两种类型:
- 编译时类型 : 由声明时的类型决定
- 运行时类型: 由实际对应的对象类型决定
测试用例:
package cn.txt.oo2;
/**
* 测试多态
* @author l
*
*/
public class TestPloym {
public static void main(String[] args){
Animal a = new Animal();
animalCry(a);
Animal g = new Dog(); //向上可自动转型
animalCry(g); //调用Dog类的Cry()方法
animalCry(new Cat());
}
static void animalCry(Animal a){ //父类引用
a.Cry();
}
}
class Animal{
public void Cry(){
System.out.println("cry");
}
}
class Dog extends Animal{//继承
public void Cry(){ //重写方法
System.out.println("wnagwangwang");
}
}
class Cat extends Animal{
public void Cry(){
System.out.println("mmiaomiaomiao");
}
}
对象的转型
子类转为父类:自动转换
- 上转型对象不能操作子类新增的成员变量和方法
- 上转型对象可以操作子类继承或重写的成员变量和方法
- 如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用重写的方法
父类转为子类:强制转化