晕了,面向对象的多态性,大家帮帮忙呀.....在线等..
namespace Test
{
public class SuperA
{
public void Fun()
{
System.Console.WriteLine("This is SuperA");
}
}
public class SubB:SuperA
{
public void Fun()
{
System.Console.WriteLine("This is SubB");
}
}
public class basemain
{
public static void Main()
{
SuperA test=new SubB();//第一种写法
test.Fun();
SuperA supera; //第二种写法
SubB subclass = new SubB();
supera = subclass;
supera.Fun();
}
}
}
::::::第一种写法:::::::
因为有两个相同的Fun()方法,所以会出一个Warning,说子类的隐藏了基类的方法,但是仍然可以执行,
但是为什么结果是执行的SuperA里的Fun(),而不是SubB的Fun(),在Java中完全合法,并且执行的是SubB中的方法.(这里实在是不明白)?!!
子类中不是已经隐藏了吗?可以用new关键字来隐藏,但是那还有什么意义,相当于一个新方法了,直接改名就可以了.
:::::::第二种写法:::::::
SuperA supera;//在堆上创建一个supera引用.
SubB subclass=new class();//在堆上创建一个subclass的引用,并在堆栈上分配空间
supera=subclass;//supera引用指向subclass的空间
supera.Fun();//这里应该是执行的SubB中的Fun()方法吧,但结果却是SuperA中的方法,请指点.
谢谢!~~~非常感谢..在线等.