110,536
社区成员
发帖
与我相关
我的任务
分享
MyDerivedClass derived = new MyDerivedClass();
MyBaseClass mybc = (MyBaseClass)derived;
derived.Print();
mybc.Print();
为什么不MyBaseClass mybc = new MyBaseClass ();呢
因为derived 当做参数被使用的,你NEW一个有什么用。
MyBaseClass可能有无数个子类,如myclass1,myclass2,myclass3......
但我的引用函数只有一个。
我不可能写无数个引用函数诸如:
int funcx1(myclass1 derived){}
int funcx2(myclass2 derived){}
...........
正常的语句可能是这样的。
int funcx(object derived)
{
MyBaseClass mybc = (MyBaseClass)derived;
mybc.Print();
}
void test()
{
var a = new MyDerivedClass();
通用处理(a);
}
void 通用处理(MyBaseClass list)
{
list.print();
}
这里的“通用处理”过程是对凡是具有 MyBaseClass 父类(或者接口)的对象的通用操作流程,这时候才会看到使用多态特性。
如果在代码中直接看到void test()
{
var a = new MyDerivedClass();
var b= (MyBaseClass)a;
通用处理(b);
}
这自然就是多于地使用抽象类型来书写代码了。方法 test 中不使用 MyBaseClass 才更直接一点。MyBaseClass mybc = new MyDerivedClass();
不是你写的那种代码。[/quote]
老师,你好,有没有关于 继承 、多态(特别是多态) 相关通俗易懂的文章介绍一下,感觉有些知识点太绕,是不是要全部学,后面的开发是否用得到?MyBaseClass mybc = new MyDerivedClass();
不是你写的那种代码。class A
{
public void print()
{
}
}
class B: A
{
public new void print()
{
}
}
这种破坏了面向对象基本设计原则的东西。既然这里明知道 B 是破坏了继承规则的,为什么不另外起一个名字(例如叫做 print2)而非要用什么 new 关键字呢?
通常看到你贴的这类代码,写代码的人可能是故意来用这种糟粕语法来考试的。