一道理解c#中对象(引用类型)相互赋值和方法覆盖(overriding)的题目
来源:互联网 发布:ntfs for mac怎么卸载 编辑:程序博客网 时间:2024/06/06 12:56
using System;
ClassA
{
public virtual void M()
{
Console.WriteLine("A");
}
}
ClassB:ClassA
{
public override void M()
{
Console.WriteLine("B");
}
}
ClassC:ClassB
{
new public virtual void M()
{
Console.WriteLine("C");
}
}
ClassD:ClassC
{
public override void M()
{
Console.WriteLine("D");
}
[STAThread]
static void Main(string[] args)
{
D d=new D();
C c=d;
B b=c;
A a=b;
//分别调用一下这几个对象中的M方法
D.M();
C.M();
B.M();
A.M();
}
}
程序的输出结果:
D
D
B
B
题目就是让写出程序输出结果。
此题中C c=d;B b=c;A a=b;这几句是考察对象间赋值,对象是引用类型,相互不能直接传递数据,赋值后仅仅是传递了指向相应对象地址的指针。就相当于转变为另外对象。
昨天又看了这段,有新感想,写出来共享。
在执行 C c=d; 后并不是简单的传递了指向对象的指针,而是把D类型的d转换为C类型的c了,由于M()为覆盖方法,虽然d被转换为C类型的对象了但仍然要调用D类型的M()方法,这就实现了转换后覆盖父类方法的目的。而用new 重写的方法则不能,是因为此方法与父类的同样的方法已经没有关系,尽管模样一样。而且覆盖(override)还可以通过继承树传递,只要中间不间断,就可以一直向父类传递直至最终父类。
- 一道理解c#中对象(引用类型)相互赋值和方法覆盖(overriding)的题目
- Python中对象的理解:引用和赋值
- java 方法的覆盖(overriding)与重载(override)
- 对象引用和赋值的理解
- 一道值类型和引用类型理解的问题
- java中的方法覆盖(overriding)和方法重载(overloading)
- java语言中方法重载overloading和方法重写(覆写)overriding的区别
- C#值类型赋值和引用类型赋值
- 一道关于C++中引用&的题目
- C#值类型赋值与引用类型的赋值
- C#值类型赋值与引用类型的赋值
- C#值类型赋值与引用类型的赋值
- C#值类型赋值与引用类型的赋值
- 方法覆盖(method overriding)
- 对象的赋值和引用
- C# 中堆栈,堆,值类型,引用类型的理解
- 理解C#的值类型和引用类型
- 彻底理解C#中值类型和引用类型的区别
- OpenVPN遇到的Secondary地址问题
- 3G网络下TCP性能差的解释
- Shell 中位运算符的应用(特别举例按位非)
- websphere启动时初始化报错解决方法
- Java性能的优化
- 一道理解c#中对象(引用类型)相互赋值和方法覆盖(overriding)的题目
- 之后的打算
- jquery控制换行
- Android开发笔记之一 Hello World
- 已知二叉树的中序遍历和后序遍历,如何求前序遍历
- Flex DataGrid数据的多种显示方式
- repaint
- 趣味题:爱因斯坦的问题
- Oracle NLS_LANG设置