Java基础篇:多重继承的实现

Java基础篇:多重继承的实现

多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承。有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需要思考的不是怎么使用多重继承,而是您的设计是否存在问题.但有时候我们确实是需要实现多重继承,而且现实生活中也真正地存在这样的情况,比如遗传:我们即继承了父亲的行为和特征也继承了母亲的行为和特征。可幸的是Java是非常和善和理解我们的,它提供了两种方式让我们曲折来实现多重继承:接口和内部类。

一、接口:

在介绍接口和抽象类的时候了解到子类只能继承一个父类,也就是说只能存在单一继承,但是却可以实现多个接口,这就为我们实现多重继承做了铺垫。

对于接口而言,有时候它所表现的不仅仅只是一个更纯粹的抽象类,接口是没有任何具体实现的,也就是说,没有任何与接口相关的存储,因此也就无法阻止多个接口的组合了。

interface CanFight {
    void fight();
}
 
interface CanSwim {
    void swim();
}
 
 
interface CanFly {
    void fly();
}
 
public class ActionCharacter {
    public void fight(){
        
    }
}
 
public class Hero extends ActionCharacter implements CanFight,CanFly,CanSwim{
 
    public void fly() {
    }
 
    public void swim() {
    }
 
    /**
     * 对于fight()方法,继承父类的,所以不需要显示声明
     */
}

二、内部类:

上面使用接口实现多重继承是一种比较可行和普遍的方式,在介绍内部类的时候谈到内部类使的多继承的实现变得更加完美了,同时也明确了如果父类为抽象类或者具体类,那么我就仅能通过内部类来实现多重继承了。如何利用内部类实现多重继承,请看下面实例:儿子是如何利用多重继承来继承父亲和母亲的优良基因。

首先是父亲Father和母亲Mother:

public class Father {
    public int strong(){
        return 9;
    }
}
 
public class Mother {
    public int kind(){
        return 8;
    }
}

  重头戏在这里,儿子类Son:

public class Son {
    
    /**
     * 内部类继承Father类
     */
    class Father_1 extends Father{
        public int strong(){
            return super.strong() + 1;
        }
    }
    
    class Mother_1 extends  Mother{
        public int kind(){
            return super.kind() - 2;
        }
    }
    
    public int getStrong(){
        return new Father_1().strong();
    }
    
    public int getKind(){
        return new Mother_1().kind();
    }
}

测试程序:

public class Test1 {
 
    public static void main(String[] args) {
        Son son = new Son();
        System.out.println("Son 的Strong:" + son.getStrong());
        System.out.println("Son 的kind:" + son.getKind());
    }
 
}
----------------------------------------
Output:
Son 的Strong:10
Son 的kind:6

儿子继承了父亲,变得比父亲更加强壮,同时也继承了母亲,只不过温柔指数下降了。这里定义了两个内部类,他们分别继承父亲Father类、母亲类Mother类,且都可以非常自然地获取各自父类的行为,这是内部类一个重要的特性:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才会成为可能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114676.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信开放平台:微信扫码登录功能

    微信开放平台:微信扫码登录功能文章目录微信开放平台:微信扫码登录功能1.授权流程说明2.授权流程代码3.用户登录和登出微信开放平台:微信扫码登录功能官方文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html1.授权流程说明微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(a

    2022年4月29日
    88
  • ios分发平台搭建_app分发下载

    ios分发平台搭建_app分发下载iOS的内侧包管理,内部分发,或者企业包的分发和Android略有不同,需要通过manifest文件以及Safari内置命令来触发安装。

    2025年5月26日
    5
  • Java基础语法(一)褪去Java神秘的衣服,“深入”了解

    Java基础语法(一)褪去Java神秘的衣服,“深入”了解

    2021年4月21日
    507
  • 干货 | LIDAR、ToF相机、双目相机如何科学选择?「建议收藏」

    干货 | LIDAR、ToF相机、双目相机如何科学选择?「建议收藏」点击“计算机视觉life”关注,置顶更快接收消息!本文阅读时间约5分钟本文翻译自卡内基梅隆大学Chrisasteroid三维视觉技术的选择传感器参数及定义LIDAR&ToF相机&双目相机介绍工作原理优缺点采样数据比较测试及极端情况测试三维成像技术原理和应用想必大家在之前的文章中了解过啦,今天想给大家比较一下LIDAR、ToF相机…

    2022年5月26日
    55
  • ubuntu php环境搭建(ubuntu python安装)

    1.安装Apachesudoapt-getinstallapache2测试:浏览器访问http://localhost//会出现网页。查看状态:serviceapache2status/start/stop/restartWeb目录:/var/www安装目录:/etc/apache2/全局配置:/etc/apache2/apache2.con…

    2022年4月16日
    44
  • python数据可视化毕业设计题目_基于Python的数据可视化

    python数据可视化毕业设计题目_基于Python的数据可视化基于Python的数据可视化杨凯利[1];山美娟[2]【期刊名称】《《现代信息科技》》【年(卷),期】2019(000)005【摘要】在大数据快速发展的今天,Python丰富的工具包在科学计算、文件处理、数据可视化等领域越来越凸显其价值。能够发现数据、清洗数据,并使用正确的工具实现数据可视化至关重要。本文叙述了Python软件第三方库的安装和绘图工具的应用,并利用Numpy和Matplotlib库…

    2022年6月27日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号