using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DirClass dir = new DirClass(5, 6);
dir.Test();
BasicClass jj = dir as BasicClass;
jj.Test();
Console.ReadLine();
}
}
public class BasicClass
{
public virtual void Test()
{ }
}
public class DirClass:BasicClass
{
public int x;
public int y;
public DirClass(int x, int y)
{
this.x = x;
this.y = y;
}
public override void Test()
{
Console.WriteLine("x={0}\ty={1}", x, y);
}
}
}我基类的Test()方法为什么可以访问派生类的xy呢?我知道这个jj.Test()会调用派生类的Test()方法,但是不知道怎么会访问到x,y。
基类类型的派生类变量不是指向派生类里基类的东西吗?就是派生类实例化的时候就要实例化基类,所以他有基类的所有东西。用基类型来
访问的时候就是访问派生类里基类的东西,现在怎么就可以把xy都显示?
谢谢帮助,请一一回答我的问题。
{
Console.WriteLine("x={0}\ty={1}", x, y);
}
这个方法里面访问自己的x,y有什么不行的??
2、virtual函数的作用,基类对象指向派生类的对象时候将会调用派生类中实现的virtual函数代码。
3、此时调用的test就相当于派生类对象本身调用自己的test方法,而方法里面本身就调用了x和y,当然看上去就是父类的对象调用了派生类的自身变量。
把一个基类函数声明为virtual,该函数就可以在派生类中重写。
jj.y //error//only
jj.Test();不存在 jj能够访问x,y的问题,最后打印出结果是因为调用了那个唯一被new出对象中定义的Test()方法而已..
谢谢