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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • axios上传文件以及遇到的问题

    axios上传文件以及遇到的问题axios上传文件以及遇到的问题1,这里上传文件使用的是elementUI的上传,也用原生的input上传写了,但是没有时间做多文件上传,下面会把代码贴出。2,这里上传文件我是先获取OSS权限和上传路径,然后再上传。但是权限获取成功后,上传到阿里云服务器时,OPTION请求报403。原因是项目中axios设置了拦截器,添加了config配置,但是在axios发送OPTION测试接口是否有权限访…

    2022年6月17日
    331
  • 发电机机房设计规范_柴油发电机房设计规范.docx[通俗易懂]

    发电机机房设计规范_柴油发电机房设计规范.docx[通俗易懂]柴油发电机房设计规范柴油发电机房设计规范篇一:柴油发电机组设置原则与机房设计  柴油发电机组设置原则与机房设计1引言  新型建筑人流密集,出于防火、消防安全的需要,对供电可靠性提出了严格的要求。目前我们一般采用柴油发电机组作为应急电源,因为柴油发电机的容量较大,持续供电时间长,可独立运行,不受电网故障的影响,可靠性较高。尤其是某些地区常用市电不是很可靠的情况下,把柴油发电机作为备用电源…

    2022年10月2日
    1
  • 模糊PID算法及其MATLAB仿真(2)

    模糊PID算法及其MATLAB仿真(2)上一篇写了模糊自整定PID的理论,这篇来做MATLAB仿真。目录补充内容:如何计算临界稳定下的开环增益Ku和震荡周期TuMATLAB进行模糊PID仿真1、准备工作2、模糊控制器的设计补充内容:如何计算临界稳定下的开环增益Ku和震荡周期Tu学过控制工程或者相关理论的同学应该比较了解,判断系统稳定性的条件一般用到劳斯表(劳斯判据)。而PID控制和模糊PI…

    2022年5月4日
    49
  • LayoutParams的详解

    LayoutParams的详解简述:LayoutParams继承于Android.View.ViewGroup.LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。通俗地讲(这里借鉴了网上的一

    2022年4月19日
    45
  • 点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

    点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

    2021年7月15日
    101
  • java中main方法是怎么运行的?

    java中main方法是怎么运行的?学过java的都知道main方法是学习java的开始,也是程序的入口,不过你有多少个类或程序,线程,他们的入口方法都是main()main方法是一个静态的方法,所以这个方法是属于类的,而不是对象的;在main()方法中,参数类型是“String[]args”,意味着在启动Java应用的同时,传递一个String类型的数组来定制化应用的初始化属性。执行过程:现在

    2022年5月31日
    62

发表回复

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

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