首页新闻招聘找找看知识库
  • 回复:18 浏览:1840 2009-09-03 10:13 来自 坤坤

    首先,先对每位关心每日一题的园友致歉,由于个人原因,导致每日一题在8月31日、9月1日、9月2日没能定期更新。在这里再次向各位园友道歉。

    下面就继续我们的每日一题话题,首先先看题目:

    下面的代码运行的结果是什么____

    提示:这里要注意new这个关键字的用法。

    using System;
    class A
    {
    public void F()
    {
    Console.Write(“A”);
    }
    }
    class B:A
    {
    new public void F()
    {
    Console.Write(“B”);
    }
    static void main()
    {
    A objA
    =new B();
    objA.F();
    }
    }

     

    答案:

    A. A

    B. B

    C. AB

    D. BA

    正确答案:

    A

  • 卡蒙
    2009-09-03 10:39 卡蒙
    终于答对了一个,哈哈啊哈哈啊哈哈哈哈哈哈哈
    A
    第1楼 回到顶楼
  • 坤坤
    2009-09-03 10:44 坤坤
    @卡蒙
    恭喜恭喜!
    第2楼 回到顶楼
  • T.s
    2009-09-03 11:36 T.s
    A
    第3楼 回到顶楼
  • Funeral
    2009-09-03 14:07 Funeral
    肯定是A啦 new的一个特征就是用来隐藏子类成员
    但这题即时没有用new关键字 同样也是输出A
    第4楼 回到顶楼
  • J.Motto
    2009-09-03 15:44 J.Motto
    @Funeral
    嗯,说的对.
    第5楼 回到顶楼
  • lifexx
    2009-09-03 18:16 lifexx
    这个我也会了...
    第6楼 回到顶楼
  • 亲爱滴小鞠
    2009-09-04 08:33 亲爱滴小鞠
    学习···
    第7楼 回到顶楼
  • 挑战激情
    2009-09-04 09:06 挑战激情
    答案是A
    虽然用new隐藏了A对象中的方法,但是没有重写
    用B初始化的A对象依然会调用A的F()方法。

    从这一点上我们也可以扩展一下这个DEMO来类比一下
    using System;
    class A
    {
    public void F()
    {
    Console.Write(“A”);
    }
    }
    class B:A
    {
    public void F()
    {
    Console.Write(“B”);
    }
    static void main()
    {
    A objA=new B();
    objA.F();
    }
    }
    那么这题给出的答案是什么呢
    第8楼 回到顶楼
  • 牛冬玲
    2009-09-04 09:19 牛冬玲
    我这两天正在学这个,
    对A a=new B();这个语句一直不太理解.
    把B 实例化给 A 或者说, 用B 初始化 A 的对象,
    是什么意思呢?
    第9楼 回到顶楼
  • Funeral
    2009-09-04 10:22 Funeral
    @牛冬玲
    父类引用指向子类对象
    第10楼 回到顶楼
  • 坤坤
    2009-09-04 10:34 坤坤
    @挑战激情
    呵呵,这个问题出得好,通过类比一下就能学到扩展性的知识啊。
    第11楼 回到顶楼
  • 挑战激情
    2009-09-04 15:36 挑战激情
    @牛冬玲
    A是基类(父类)B是派生类(子类)。
    B继承了A类,那么B类也就拥有了A类中的所有属性(特殊的情况坤坤哥之后肯定会有相应问题出现的),那么A就可以使用B来实例化自己的所有属性咯。当然这个说法不准确。
    你也可以看看多态方面的相关知识
    如果我们现在有第三个类
    class C:A
    { 
    }
    那么情况又会是什么样呢
    此类问题的描述和解释在博客园里有很多朋友发过。可以参考下他们的博文。
    第12楼 回到顶楼
  • Such as autumn
    2009-09-04 17:26 Such as autumn
    把new去掉为什么结果还是输出“A”呢,如何理解?
    第13楼 回到顶楼
  • 牛冬玲
    2009-09-06 07:42 牛冬玲
    @挑战激情
    恩, 谢谢你~~
    第14楼 回到顶楼
  • liangwei389
    2009-09-07 17:33 liangwei389
    答对了!
    第15楼 回到顶楼
  • YPF
    2009-12-10 11:56 YPF
    选A吗?新版本方法阻断继承
    第16楼 回到顶楼
  • YPF
    2009-12-10 11:59 YPF
    没有new结果也是A.我猜是因为是A的引用。因为方法表是自上而下创建的。A类型的方法表在前。B类型的方法表在后,查方法表时候A的引用好像是先从A类的方法表查起,所以调用A类的方法。
    不知是不是。。。。
    第17楼 回到顶楼
  • 知鸟
    2015-05-15 10:44 知鸟
    这里 坤坤是要考(new的一个特征就是用来隐藏子类成员)这个知识点吧,但是觉得有个问题

    如果代码是这样呢 ?

    using System;
    class A:B
    {
    new public void F()
    {
    Console.Write(“A”);
    }
    }
    class B
    {
    public void F()
    {
    Console.Write(“B”);
    }
    static void main()
    {
    A objA=new A();
    objA.F();
    }
    }

    会输出什么呢 ??? 不知道这样是不是正确的
    第18楼 回到顶楼
登录后才能评论,请先登录注册