| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 804 人关注过本帖
标题:重载 问题
只看楼主 加入收藏
语言呆子
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-4-12
结帖率:83.33%
收藏
 问题点数:0 回复次数:8 
重载 问题
using System;
using System.Collections.Generic;
using System.Text;


namespace ConsoleApplication2
{
    abstract class Class1
    {
        abstract public void test();
    }
    class Class2 : Class1
    {
        public override void test()
        {
            Console.Write("Class2");
        }
    }
    class Class3 : Class2
    {
        public void test()
        {
            Console.Write("Class3");
        }
    }

   
   
    class Program
    {
        static void Main(string[] args)
        {
            Class1 x = new Class3(); x.test();
        }
    }
}

为什么输出结果是class2,Class3继承Class2,为什么不输出class3???????麻烦各位大虾了,谢谢!!!!!!
搜索更多相关主题的帖子: 重载 
2009-11-03 09:15
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
这不叫重载啊,
你的函数一样,参数一样,不是重载...

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-11-03 11:45
domon
Rank: 3Rank: 3
来 自:河南
等 级:论坛游侠
帖 子:92
专家分:191
注 册:2009-10-26
收藏
得分:0 
这种模式叫重写
重载是同一个类里面的不同参数列表的同名方法

希望,是走出来的!!!
2009-11-03 13:39
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
其实这东东不太好定义吧,重写应该像Class2中的override关键字,但这个没有.
就应该叫着覆写吧!

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-11-03 17:26
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
收藏
得分:0 
重载是在一个类里面,相同方法名,不同参数,返回值
重写是基类定义虚方法,用关键字Visual声明,继承的类实现它,用关键字override声明

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2009-11-03 17:32
语言呆子
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-4-12
收藏
得分:0 
为什么不输出class3
2009-11-03 18:01
minigun
Rank: 2
等 级:论坛游民
帖 子:8
专家分:23
注 册:2006-6-12
收藏
得分:0 
因为你的引用变量的类型是class1,即使你创建的实例的类型是class3,这个实例也会被当作class1来对待,所以你调用的test方法不是class3里的,而是class1里的(class1里的方法被override了,所以实际调用的是class2里的)。
你想要class3里的test被调用,要么用 class3 x = new class3(), 或者仍用 class1 x = new class3(),但把class3里的test方法定义成override
建议把类的多态性好好看看
2009-11-04 18:19
凡的天地
Rank: 2
等 级:论坛游民
帖 子:22
专家分:15
注 册:2009-10-19
收藏
得分:0 
因为Class1 x = new Class3(); x.test();这个代码的意思是x.test()先去找Class1里的方法,然后往下推,知道找到能输出来的为之。
我说的对吗???
2009-11-04 21:41
czg123698741
Rank: 2
等 级:论坛游民
帖 子:348
专家分:84
注 册:2009-3-4
收藏
得分:0 
大哥你这个是(abstract)抽象类啊,后面继承的类的方法必须使用override覆盖重写。
我把您的代码改了一下:

using System;
using System.Collections.Generic;
using System.Text;


namespace ConsoleApplication2
{
    abstract class Class1
    {
        abstract public void test();
    }
    class Class2 : Class1
    {
        public override void test()
        {
            Console.Write("Class2");
        }
    }
    class Class3 : Class2
    {
        public override void test()
        {
            Console.Write("Class3");
        }
    }



    class Program
    {
        static void Main(string[] args)
        {
            Class1 x = new Class3(); x.test();
            Console.ReadLine();
        }
    }
}

结果为:Class3

复制你的代码在VS2005里面,明显提示错误!
2009-11-05 09:18
快速回复:重载 问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019394 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved