A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周亮 中级黑马   /  2013-1-5 14:23  /  1581 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近看到多态,有很多知识都有点模糊,在这里稍稍总结一下,希望不足的地方,大家能够帮忙补充指正。
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.玩游戏(); //能


1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马