一:多态
1.多态概念:
对象在不同时刻表现出来的不同状态
可以理解为事物存在的多种体现形态。
2.前提条件:
A:要有类的继承关系。 extends
B:要有方法的重写
C:要有父类引用(或父接口)指向子类对象。 Fu f = new Zi();
多态:Fu fu=new Zi()
可以理解为:儿子 Zi 穿上 父亲的衣服去干活---------干活的还是儿子。
3. 针对引用类型:有两种状态
编译期间状态。
运行期间状态。
编译期间状态和运行期间状态不一样了 这就是多态。
4.多态间的成员特点:方法有重写,而变量没有
编译看左右,运行看左右是 看多态: Fu fu = new Zi () ;
编译时看报不报错,不报错就开始运行。
A:成员变量:编译看左边,运行看左边。
B:成员方法:编译看左边,运行看右边。
左边是那个,就去那个里面找。
eg:
class Fu
{
String name="张三";
public void show() //声明方法
{
System.out.println(name+"去买饭");
}
}
class Zi extends Fu
{
String name="李四";
public void show()
{
System.out.println(name+"去买饭");
//super.show(); //调用父类的成员方法。
}
/*public String name()
{
System.out.println("name"+super.name);
return name;
}
*/
}
class DuotaiTest
{
public static void main(String[] args)
{
/*
Fu f=new Fu();
f.show();
Zi z = new Zi();
z.show();
System.out.println(z.name);
*/
Fu f=new Zi();//编译看左边,运行看变量还是方法
f.show(); //方法 运行看右边
System.out.println(f.name); //变量 运行看左边
}
}
二:引用类型转型
1.向上转型:从小到大 (子到父)
eg:Fu f = new Zi();
向下转型:从大到小 (父到子) 需要强制转换
eg:Zi z = (Zi)f; 强转 将 f 强制转换为(Zi),用 Zi z接受
2.多态转型中隐含类型不匹配,会出现类型转换异常:classcastException
eg:猫能转化为动物,动物可以转换为猫。但是猫和狗不能互相转换。
3.多态的弊端:
父类的引用不能使用子类的特有功能。所以引出了类型转换。
4.多态好处:提高代码的扩展性、维护性。 |