zoukankan      html  css  js  c++  java
  • java模拟多重继承,且避免重复代码的方法

    众所周知,java是一门不支持多重继承的语言,每当在java中谈及多重继承,人们都会说起接口。
    然而一般理解之下,既然是接口,里面的方法是不能有具体实现的,顶多也就起到一个规范的作用嘛,这样岂不是还会造成代码的大量重复?
    但是事实上并非如此,利用类的组合关系,即可很好地避免代码重复,同时也起到了代码的规范化,而类也在逻辑上实现了多重继承。
    下面来举一个例子:
    交通工具的基类:Vehicle
    陆地交通工具:GroundVehicle
    水上交通工具:WaterVehicle
    水陆两用交通工具:CommonVehicle

    一般来说,陆地交通工具与水上交通工具都需要继承于交通工具(Vehicle),但是谁陆两用交通工具呢?只能继承于一个父类呀,怎么办?难道继承某一个,然后另一个就全部再复制一遍?
    并不需要,请看类图:
    这里写图片描述

    如图所示,我们新建了一个IWaterVehicle接口,而水陆两用交通工具CommonVehicle实现了该接口的同时,也与水上交通工具有组合关系。

    水上交通工具需要的方法全部申明于IWaterVehicle接口中,实现于WaterVehicle类中,而对于CommonVehicle类来说,里面包含了一个WaterVehicle类的对象,而实现接口中规定的方法时,只需要调用对象里的对应方法即可。

    举个栗子:
    IWaterVehicle接口:

    public interface IWaterVehicle{
        public run();
    }

    WaterVehicle类:

    public WaterVehicle implments IWaterVehicle{
        public run(){
            System.out.println("run on water");
        }
    }

    CommonVehicle类:

    public CommonVehicle extends GroundVehicle implments IWaterVehicle{
        /*
        * 继承方面的代码省略
        */
    
        //定义一个WaterVehicle对象————体现了组合关系
        WaterVehicle wVehicle = new WaterVehicle();
        //实现接口中定义的方法
        public run(){
            //这里直接调用wVehicle对象的方法,避免了重复代码
            wVehicle.run();
        }
    }



    欢迎大家加入QQ群一起交流讨论,「吟游」程序人生——YinyouPoet

  • 相关阅读:
    困扰我的c++语法
    C++ primer第三章作业
    渔夫捕鱼问题
    JAVA输入输出
    Python学习5——抽象,涉及抽象和结构、函数的自定义、参数、作用域、递归
    牛顿迭代法计算平方根
    Python学习4——条件、循环及其他语句总结
    Python补充1——Python的简单推导
    Python补充2——Python单行注释、整段注释使用方法
    Python补充3——Python中的 split() 函数
  • 原文地址:https://www.cnblogs.com/yinyoupoet/p/13287553.html
Copyright © 2011-2022 走看看