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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 WaterTheGreat 于 2015-12-17 22:26 编辑

今天学多态这块,一边看视频一遍自己编代码,发现一些问题,跟视频的结果不一样。后来自己通过分析,得到了比较满意的答案。代码如下:
/*
定义一个父类Animal,一个继承父类的子类Cat,然后在主函数中调用,具体如下
*/
class Demo
{
        public static void main(String[] args)
        {        
                Animal A =new Cat();  //定义一个父类的引用,指向子类的对象
                A.show();
                Cat c =new Cat();//定义一个子类对象
                c.show();
                System.out.println("-----------------------");//打印一串"-",方便查看结果
                function(A);
                function(c);
        }
        public static void function(Animal a) //定义一个功能函数,可以调用所有Animal类及其子类的show方法
        {
                a.show();
        }
}
//定义一个动物类
  class Animal
{
        public static void show()
        {
        System.out.println("动物");
        }
}
//定义一个 猫咪类
class Cat extends Animal
{
        public static void show()
        {
                System.out.println("猫咪");
        }
}

结果:        动物
    猫咪
    ----------------------------
    动物
    动物

分析:上边俩个结果,视频里已经讲了,是因为静态绑定的原因,所以是:”动物“,”猫咪“。为什么下边两个都是“动物”?
       后来我分析,因为function的形式参数为Animal类,当你传入Cat类的c的时候,系统自动进行了类型提升,将c变成了Animal类,又因为静态绑定的原因,所以输出两个”动物“。
      即:在此例中,多态的情况下调用  function (),永远执行父类里的静态方法。

不知道我的分析对您有没有帮助?这也是我的个人分析,不知道对不对,希望大家讨论讨论!


duotai.jpg (92.79 KB, 下载次数: 12)

duotai.jpg

1 个回复

倒序浏览
沙发,顶顶顶顶
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马