多继承的坑

Dongo2 2018-05-03 04:27:09

public class Test : MonoBehaviour {

void Start () {
List<A> alist = new List<A>();
alist.Add (new B ());
alist.Add (new E ());
alist [0].Say (); //结果打印 A say
alist [1].Say (); //结果打印 E say
}


public interface C{
void Say();
}

public class A:C{
public virtual void Say(){
Debug.Log ("A say");
}
}

public class D:A{
public virtual void Say(){
Debug.Log ("D say");
}
}

// B->D->A
public class B:D{
public override void Say(){
Debug.Log ("B say");
}
}

//E->A
public class E:A{
public override void Say(){
Debug.Log ("E say");
}
}
}




多一层继承结构打印的内容就不同了,能有大神解释下什么原因吗
...全文
405 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
token不能为空 2018-05-03
  • 打赏
  • 举报
回复
D里Say方法和父类冲突了,B override 的是D里的Say
token不能为空 2018-05-03
  • 打赏
  • 举报
回复
还有就是这不算 多继承
xuzuning 2018-05-03
  • 打赏
  • 举报
回复
对象输出自己类定义的内容,有什么不对吗? new E ().Say (); //结果打印 E say 至于 new B().Say (); //结果打印 A say 首先是你违规在先,因为编译器已经告诉你 public virtual void Say(){ 违约了 当然 virtual 或 new 都会阻断继承链

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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