最近看到多态,有很多知识都有点模糊,在这里稍稍总结一下,希望不足的地方,大家能够帮忙补充指正。
1、首先什么是多态?
多态就是同一个对象在不同时刻对应的状态。
2、多态的前提是什么呢?
多态的前体是必须存在类的继承或者接口的实现。
有方法的重写
有父类引用指向子类对象。
3、接下来就是代码体现了
class Fu//先写一个父类
{
int num = 10;
public void show()
{
sop("show Fu");
}
}
class Zi extends Fu//子类继承父类
{
int num = 20;
public void show()//与父类具有相同的方法
{
sop("show Zi");
}
}
class Test//测试
{
public static void main(String[] args)
{
Fu f = new Fu();//在这里创建一个父类对象,那么调用方法的时候自然就是父类本身的方法
f.show(); //show Fu
sop(f.num); //10
Zi z = new Zi();
z.show(); //show Zi
sop(z.num); //20
//多态,
Fu f = new Zi();
f.show(); //show Zi 父类和子类方法间存在重写关系,但是成员变量不存在重写关系
sop(f.num); //10
}
}
再来一个小例子进行解释
孔子爹:教书(JavaSE),40//这个就是父类,有个教书方法,年龄是40
孔子:教书(论语),玩游戏(),20//子类继承父类,有相同的方法,还多个玩游戏的功能,年龄是20
//有天有人,请孔子爹来教书,但是他爹不在,孔子上场
孔子爹 k爹 = new 孔子(); //穿上爹的衣服,粘个小胡子,带上眼睛。装爹。向上转型。
k爹.教书(); //论语,本身是孔子,重写了父类的教书方法,所以只能是教论语
sop(k爹.age); //40,在这里成员变量不存在重写这么一说,所以还是用的他爹的年龄
k爹.玩游戏(); //不能,为什么不能呢?多态的时候,不能调用子类独有的方法
//一天过去了,孔子回家了。
//脱掉衣服,去掉小胡子,摘掉眼睛
孔子 k = (孔子)k爹; //向下转型
k.教书(); //论语
sop(k.age); //20
k.玩游戏(); //能
|
|