一.多态:同一行为具有不同表现形式
A.动态多态(运行时多态,晚时绑定,延时绑定,后期绑定)
子类重写了父类的方法,每个子类的重写方法的内容不同;
一个父类类型变量等于子类创建的对象(上转型对象)Fu fu=new Zi();(父类对象调用子类对象中的重写方法)
fu指向不同子类创建的对象,fu调用各子类被重写的方法会有不同结果,称为动态多态。
B.静态多态(编译时多态,早绑定)
同一类中方法重载可实现静态多态
二.上转型对象
Fu fu=new Zi();
A.fu不能调用子类中新定义的属性与方法
B.当子类成员变量与父类成员变量名字重复,则上转型对象调用的是父类中的方法。
三.下转型对象
将上转型对象强制类型转换(向下转型)
Zi z=(Zi)fu;
上转型对象向下转型后可以调用子类新建方法和属性
四.代码示例
public class FireFu {
String a="父类成员变量a";
public void fire() {
System.out.println("开火");
}}
public class FireZi extends FireFu{
String a="子类一与父类同名成员变量a";
String z="子类一成员变量z";
public void fire() {
System.out.println("手枪开火");
}}
public class FireZi2 extends FireFu{
public void fire() {
System.out.println("步枪开火");
}}
public class Test {
public static void main(String[] args) {
FireFu f=new FireZi();
f.fire();
System.out.println("********");
f=new FireZi2();
f.fire();
System.out.println("********");
f=new FireZi();
//System.out.println(f.z);//上转型对象不能调用子类新建属性和方法
FireZi g=(FireZi)f;
System.out.println(g.z);//上转型对象向下转型后可以调用子类新建属性和方法
}}
运行结果:
手枪开火
********
步枪开火
********
子类一成员变量z