##多态定义
父类类型的变量指向子类创建的对象,使用该变量调用父类中一个被子类重写的方法,则父类中的方法呈现不同行为特征是多态。注意(1,方法必须是已经重写了。2,Java引用对象有俩种类型,等号左边是编译时类型即Javac....d等号右边是运行时类型即Java....两边是不对应的)。
形如
Mammal mammal=new Whale();
##多态的结果
当程序运行时,那个引用变量调用父类中被子类重写的方法时,其方法行为表现的是子类重写该方法后的行为特征,而不是父类方法的行为特征。
形如
public class Whale extends Mammal{
public double wight=1;
public void move() {
System.out.println("oo...");
}
public class Mammal {
public double wight=10000;
void move() {
System.out.println("woo");
}
public class Earth {
public static void main(String[] args) {
Mammal mammal=new Whale();
mammal.move();
System.out.println(mammal.wight);
}
}
oo...
10000.0
注意:属性是没有多态的。所以会输出wight是1000.0
##对象上转型
父类类型的变量指向其子类创建的对象 。上面情况就是上转型,因为whale是Mammal的子类,左边虽然是父类的类型但地址是子类中的。
##对象下转型
上转型对象不能调用子类新增的方法 和新增加的属性 ,这时再把已经上转型的对象下转型指向子类可以解决问题。
因为eat方法是子类新增的方法父类中没有,在编译时就出错了,正确的是: