本帖最后由 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 (),永远执行父类里的静态方法。
不知道我的分析对您有没有帮助?这也是我的个人分析,不知道对不对,希望大家讨论讨论!
|
|