是多态还是变态,请指教

king2003 2008-06-18 09:34:22
class SecondExp
{ public int firstMethod()
{ return(secondMethod()*thirdMethod()); }

public int secondMethod()
{ return(10); }

public int thirdMethod()
{ return(20); } }

class DerivedClass : SecondExp
{
public new int secondMethod()
{ return (30); }
}
class Test
{
public static void Main()
{

//第一种:
SecondExp objDerived = new DerivedClass();
objDerived.secondMethod(); //注意这种方法
//第二种:
DerivedClass objDerived = new DerivedClass();
objDerived.secondMethod(); //注意这种方法

System.Console.WriteLine(objDerived.firstMethod());
}
}
...全文
110 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
大自然D使者 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 viena 的回复:]
在基类中virtual、abstract或override的方法
在派生类override以后,才有多态
如果使用new关键字,是隐藏,基类的方法与派生类的方法是毫无关系的两个方法
用类型为基类的对象,调用的是基类的方法
[/Quote]
hubblebubblepig 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 king2003 的回复:]
我子类中如果没有NEW的话还是调用的父类的方法
[/Quote]
我也并不是在说你子类中如果不使用new时候的情况啊 呵呵~

new是在子类对象中对父类成员进行覆盖的显示声明(换句话说你写不写它 本质上没有区别 它只是个"显示的"声明)
"我子类中如果没有NEW的话还是调用的父类的方法"
只能说明你使用的是SecondExp objDerived = new DerivedClass()中的objDerived(一个声明为父类的对象)来调用的方法

只要你不是"override" 就遵循"谁的声明就用谁的方法"
wangping_li 2008-06-18
  • 打赏
  • 举报
回复
支持五楼,使用new都知道结果了
vrhero 2008-06-18
  • 打赏
  • 举报
回复
public new int secondMethod()
-------
既然使用new覆盖说明你知道这样做的结果...既然知道结果说明你愿意接受这种方式...既然是你自愿的...还有什么疑问?
king2003 2008-06-18
  • 打赏
  • 举报
回复
第一种情况下
父类的引用(SecondExp objDerived)指向一个子类的对象(new DerivedClass()) 而且方法secondMethod()在子类中使用new进行声明 所以使用的规则是"谁的声明就用谁的方法" 也就是说使用的是父类的secondMethod方法
同理分析 第二种情况下
使用的是子类的secondMethod方法
我子类中如果没有NEW的话还是调用的父类的方法
king2003 2008-06-18
  • 打赏
  • 举报
回复
大清早的就这么多人呵,谢谢了
viena 2008-06-18
  • 打赏
  • 举报
回复
在基类中virtual、abstract或override的方法
在派生类override以后,才有多态
如果使用new关键字,是隐藏,基类的方法与派生类的方法是毫无关系的两个方法
用类型为基类的对象,调用的是基类的方法
hubblebubblepig 2008-06-18
  • 打赏
  • 举报
回复
如果在子类中对父类的方法进行了"override"声明
则不管是SecondExp objDerived = new DerivedClass()
还是DerivedClass objDerived = new DerivedClass()
调用的都将是子类的已经重写的secondMethod()
满衣兄 2008-06-18
  • 打赏
  • 举报
回复
不同的对象对同一消息的不同响应就叫堕胎!!!!
hubblebubblepig 2008-06-18
  • 打赏
  • 举报
回复
第一种情况下
父类的引用(SecondExp objDerived)指向一个子类的对象(new DerivedClass()) 而且方法secondMethod()在子类中使用new进行声明 所以使用的规则是"谁的声明就用谁的方法" 也就是说使用的是父类的secondMethod方法
同理分析 第二种情况下
使用的是子类的secondMethod方法
viena 2008-06-18
  • 打赏
  • 举报
回复
据说好像是变态~~~~~
jacklau88 2008-06-18
  • 打赏
  • 举报
回复
多态,面向对象编程的主要特性之一

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧