class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields()
{
}
} class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
} public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}当使用new B()创建B的实例时,产生什么输出?
答案:x = 1, y = 0 ; x = 1 y = -11.面试回来后我在自己机器试了下,输出的是x=1,y=0。他们给的答案竟然不对?!
2.为什么实例化类B会执行方法PrintFields();
3.为什么 y = 0 ?
面试类
我测试了确实是只输出x=1,y=0。(注意A中的虚拟方法根本没有实现什么)你可以花几秒钟复制到控制台测试下嘛
我测试了确实是只输出x=1,y=0。(注意A中的虚拟方法根本没有实现什么)你可以花几秒钟复制到控制台测试下嘛
反正闲测试了死心了没,LZ还是去看看继承,这个就是个基础来的,期末考试会出的题,没想到是面试题····
我用的是vs2008,你的呢?
道理上确实应该先执行A的构造函数,而且调用的是B的重写方法,应该输出像你说的那样,但我的机器怎么就是这样??
我用的是vs2008,你的呢?
道理上确实应该先执行A的构造函数,而且调用的是B的重写方法,应该输出像你说的那样,但我的机器怎么就是这样??
不关是VS08或者10的问题的,我的也是10的,是你代码问题吧,反正我是复制你的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{ B b1 = new B();
b1.PrintFields();
Console.ReadLine();
}
}
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields()
{
}
} class B : A
{
int x = 1;
int y; public B()
{
y = -1;
} public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
}
我用的是vs2008,你的呢?
道理上确实应该先执行A的构造函数,而且调用的是B的重写方法,应该输出像你说的那样,但我的机器怎么就是这样??
不关是VS08或者10的问题的,我的也是10的,是你代码问题吧,反正我是复制你的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{ B b1 = new B();
b1.PrintFields();
Console.ReadLine();
}
}
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields()
{
}
} class B : A
{
int x = 1;
int y; public B()
{
y = -1;
} public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
}
还有就是不要再纠结在这了,反正都面试不过了,还是想想下次面试吧
我用的是vs2008,你的呢?
道理上确实应该先执行A的构造函数,而且调用的是B的重写方法,应该输出像你说的那样,但我的机器怎么就是这样??
不关是VS08或者10的问题的,我的也是10的,是你代码问题吧,反正我是复制你的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{ B b1 = new B();
b1.PrintFields();
Console.ReadLine();
}
}
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields()
{
}
} class B : A
{
int x = 1;
int y; public B()
{
y = -1;
} public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
}
还有就是不要再纠结在这了,反正都面试不过了,还是想想下次面试吧楼主只是说B b = new B();
并没有b.PrintFields();所以你们结果不一样,去掉后面一行,你们就一致了。
你加了行b1.PrintFields(),结果肯定那样啦。
我就写了个new B(),什么也没有 class Program
{
static void Main(string[] args)
{
new B();
Console.ReadKey();
}
}
你加了行b1.PrintFields(),结果肯定那样啦。
我就写了个new B(),什么也没有 class Program
{
static void Main(string[] args)
{
new B();
Console.ReadKey();
}
}
你不加这个那你怎么输出B的重写的结果,那你B继承A来做什么还不如直接输出A得了,省功夫