| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:关于多态的问题?!
只看楼主 加入收藏
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
关于多态的问题?!
看了这么多的书,对这一块一直不太理解,希望有人能来解释一下。
如果一个类
public class aaa
{
  public virtual void abc(){}
}
public class bbb:aaa
{
 public override void abc(){}
}
public class ccc:aaa
{
public new void abc(){}
}
上面override和new到底有什么区别?如果基类中有abc这个方法,子类中也有想同名子的方法,可不可以?
搜索更多相关主题的帖子: 多态 
2010-01-12 14:40
niwawa
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:35
专家分:123
注 册:2007-10-14
收藏
得分:0 
override 是重写,指的是子类重写父类的方法,当用了Override修饰符的方法 始终只有一个被你调用
new 是用来分配内存 实例化对象
2010-01-12 15:07
saitor
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:5
帖 子:373
专家分:1520
注 册:2009-5-18
收藏
得分:0 
Override和new的区别
Override是复写掉了父类的方法,new是隐藏掉;
public class aaa
{
  public virtual void abc(){}
}
public class bbb:aaa
{
public override(new) void abc(){}
}
public class ccc:bbb
{

}
aaa a=new ccc();
a.abc();

当修饰符是override时调用的是bbb里的方法;而new 时调用的是aaa里的方法;

2010-01-12 21:32
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:0 
楼上的,NEW时什么情况下才调用此方法,因为你说过:“而new 时调用的是aaa里的方法”

QQ:81704464
2010-01-13 07:53
minigun
Rank: 2
等 级:论坛游民
帖 子:8
专家分:23
注 册:2006-6-12
收藏
得分:20 
假设3种情况
1.什么修饰符都没用
2.用到virtual和override
3.用到virtual和new

如果你用父类类型的变量引用子类实例,然后调用方法,就好象3楼举的例子
1.调用的是父类里的方法
2.调用的是子类里的方法
3.调用的是父类里的方法

3的结果和1是一样的 不同的是1的话compiler会提醒你这个方法被隐藏了,3是隐藏这个方法的合法做法,compiler不报错

2010-01-13 08:56
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:0 
楼上的深知我心啊~~

QQ:81704464
2010-01-13 12:45
快速回复:关于多态的问题?!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031913 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved