今天主要学了类的多态
多态的前提
1.有继承
2.有方法重写
3.有父类引用指向子类对象
成员变量:编译看左边(即父类中有没有当前变量),执行看左边(输出父类变量);
成员方法:编译看左边(即父类中有没有当前方法),执行看右边(输出子类的数据)
public class Zi extends Fu{}
Fu f = new Zi();//父类的引用指向子类(向上转型)
Zi z = (Fu)f;//(向下转型)强制转换
好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
弊端:不能使用子类的特有功能
例子:
父类
package T001;
public class Fu {
public int age = 40;
public void call()
{
System.out.println("fucall");
}
}
子类
package T001;
public class Zi extends Fu{
public int age = 20;
public String name;
public void call()
{
System.out.println("zicall");
}
public void Z()
{
System.out.println("ZZZZZZZZZ");
}
}
测试类
package T001;
public class demo {
public static void main(String[] args)
{
Fu f = new Zi();//创建对象
System.out.println(f.age);//输出父类中的age即40
System.out.println(f.name);//因为父类中没有name,所以报错
f.call();//父类中有call方法可编译,执行的是子类中数据
}
}