多态:某一种事物的多种存在形态;
1、体现:父类引用指向子类的对象,即父类F ,子类Z,F fu= new Z();
2、好处:大大提高程序扩展性;
3、前提:必须是继承或实现关系;且存在覆盖;
4、弊端:只能访问父类的成员;
转型:父类引用指向子类对象时,又想要使用子类中的方法,那
么就需要将该父类引用强转成指向的子类的类型:
关键字:instanceof-->判断引用指向的对象是否是某个类的对象:
ainstanceof Person;
父类F ,子类Z,Ff = new Z();
成员方法特点:编译看左边,运行看右边;如果右边(子类)不存在所调用的方法
静态成员变量:无论编译还是运行,都参考左边;
成员变量特点:多态中,无论编译运行都看左边,调用时也是调用到父
类中的变量;就是说父类和子类中有相同名称变量,那么运行时调
用的是父类的变量;
//定义一个类
classFu{
publicstatic void main(String[] args) {
Fuf = new Zi();
f.run();//编译时,检查父类中是否有run方法,运行时调用的是子类的run();
//f.method();//因为父类中没有method方法,那么写上则编译不能通过
if(finstanceof Zi){//判断f是否指向Zi类的对象
Ziz = (Zi)f;//将父类引用向下转型为子类引用;
z.method();//引用转成子类类型之后,就可以调用子类的方法了
}
}
public void run(){
System.out.println("Fu_run");
}
}
//定义一个Zi类继承Fu类,重写了Fu类的run方法,并且有一个自己独有的方法method;
classZi extends Fu{
publicvoid method(){//子类中独有的方法
System.out.println("Zi_method");
}
public void run(){//覆盖了父类中的run方法
System.out.println("Zi_run");
}
}