博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一种多继承方案
阅读量:4690 次
发布时间:2019-06-09

本文共 1445 字,大约阅读时间需要 4 分钟。

现在支持多继承的语言不是很多,主流的Java和C#都是单继承的,因为多继承有如下的缺点:
a、结构复杂化
b、优先顺序模糊
c、功能冲突:不同父类中有相同的方法时会产生冲突。
我参考了GO语言、Ruby语言等提出一个新的多继承的方案,同时也可以替代当前的比较笨重的单继承的方案。
多继承的定义如下:
如果一个类A含有另一个类B所有的字段,并且有B所有的抽象方法,那么A就是B的子类。
如果子类和父类都实现相同形式的方法,那么子类作为父类运行共有的方法时会使用自己的方法。
例子1:
    class classA
    {
         string Name;
    }
    class classB
    {
        string Name;
        string Place;
    }
    因为classB含有类classA的所有字段,所以可以认为classB是classA的子类,通过as方法可以把classB转化为classA。
    classB b = new classB();
    classA a =b.as(classA);
    如果现在有一个类
    class obj
    {
        
    }
    类obj中没有任何类成员字段,那么其它任何一个类都可以转化成obj
例子2:
    class classA
    {
         string Name;
        void Out()
        {
            ...;
        }
    }
    class classB
    {
        string Name;
        string Place;
    }
    classA有Out方法而classB没有,这种情况下classB仍然可以转化成classA
例子3:
    abstarct class classA
    {
         string Name;
        abstarct void Out();
    }
    
    classA有Out方法但是是抽象的放啊,这就要求能转化成它的类不但要有含有和它的相同的字段而且要有
    Out方法。
    class classB
    {
        string Name;
        string Place;
        void Out()
        {
            ...;
        }
    }
    classB实现了Out方法才能转化成classB.
例子3:
    class classA
    {
         string Name;
        void Out()
        {
            Console.WritleLine("classA");
        }
    }
    class classB
    {
        string Name;
        string Place;
    }
    classA有Out方法而classB没有,这种情况下classB转化成classA可以调用Out方法,输出"classA".
    classB b = new classB();
    b.as(classA).Out();
例子3:
    class classA
    {
         string Name;
        void Out()
        {
            Console.WritleLine("classA");
        }
    }
    class classB
    {
        string Name;
        string Place;
        void Out()
        {
            Console.WritleLine("classB");
        }
    }
    classA和classB都有相同的Out方法,这种情况下classB转化成classA调用的Out方法还是自己的Out方法,
    输出的是"classB"。
    classB b = new classB();
    b.as(classA).Out();

转载于:https://www.cnblogs.com/haiconc/archive/2012/06/05/2536622.html

你可能感兴趣的文章
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>
题目1462:两船载物问题
查看>>
POJ 2378 Tree Cutting(树形DP,水)
查看>>
第二冲刺阶段个人博客5
查看>>
UVA 116 Unidirectional TSP (白书dp)
查看>>
第三方测速工具
查看>>
MySQL 网络访问连接
查看>>
在aws ec2上使用root用户登录
查看>>
数据访问 投票习题
查看>>
CIO知识储备
查看>>
cnblog!i'm coming!
查看>>
使用点符号代替溢出的文本
查看>>
Axios 中文说明
查看>>
fatal: remote origin already exists.
查看>>
gridview 自定义value值
查看>>
2018二月实现计划成果及其三月规划
查看>>
类名.class和getClass()区别
查看>>