多态:
一个事物,具备的多种形态。
特点:
Fu a=new Zi();或 Zi a=new Zi();
1,多态中成员函数:
在编译时:参考左边,调用 Fu类里的方法,如果父类里没有该方法,则会编译失败。
在执行时:参考右边,调用 Zi类里的方法。
2,多态中(静态/非静态)成员变量:
无论编译还是执行都参考左边 调用左边类里的变量值。
3,多态中特殊的静态成员函数:
无论编译还是执行都参考左边。
注意:多态中调用子类父类中共有的方法,运行的是子类重写后的方法如果要是调用子类的特有方法,必须进行类型的转换,使用instanceof 确认 ,然后在强转在调用其子类方法。
心得:多态是由继承衍生过来的,有了继承的特性才有了多态。多态就是子类和父类的另一种使用关系。有了多态我们可以更好的操作子类和父类之间的关系。在使用多态特性的时候要注意,在子类调用成员变量和成员函数的候,要区分出编译时期和执行时期的不同。
例:
abstract class Animal
{
public abstract void eat();
}
class Cat extends Animal
{
public void eat(){
System.out.println("吃鱼");
}
public void zhua(){
System.out.println("抓老鼠");
}
}
class Dog extends Animal
{
public void eat(){
System.out.println("啃骨头");
}
public void kanmen(){
System.out.println("看门");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal a=new Cat(); //多态性,cat dog 都继承Animal 这是一个自动提升的过程
fun(a);
//如果想要用cat 类里面的其它方法,如下:
Cat c=(Cat)a; //把上面强制转cat
c.zhua(); //这样就可以用cat类里的其它方法了。
Animal d=new Dog();
fun(d);
Dog dg=(Dog)d;
dg.kanmen();
}
public static void fun(Animal x){ //这样写成父类,就可以少写代码。其子类都可以写进来。。
x.eat();
/*
if(x instanceof Cat){ //x是不是cat 是就执行
Cat c=(Cat)a; //把上面强制转cat
c.zhua();
}
else if(x instanceof Dog){ //x是不是 dog
Dog dg=(Dog)d;
dg.kanmen();
}
*/
}
}