Java接口默认方法带来的问题分析【二义性问题】
作者:cakincqm 发布时间:2023-11-27 20:32:55
标签:Java,接口,二义性
本文实例分析了Java接口默认方法带来的问题。分享给大家供大家参考,具体如下:
一 点睛
Java 8中,如果一个类实现两个或多个接口,即“变相”的多继承,但是若其中两个接口都包含一个名字相同的default方法,会出现二义性问题。
二 实战
1 代码
interface faceA //定义接口faceA
{
void someMethod( );
default public void DefaultMethod( )//定义接口中默认方法
{
System.out.println("Default method in the interface A");
}
}
interface faceB //定义接口faceB
{
default public void DefaultMethod( )//定义接口InterfaceB中同名的默认方法
{
System.out.println("Default method in the interface B");
}
}
class DefaultMethodClass implements faceA,faceB //定义子类实现接口InterfaceA, InterfaceB
{ public void someMethod( ) //实现接口InterfaceA的抽象方法
{
System.out.println("Some method in the subclass");
}
}
public class Interfacsamedefaults
{
public static void main(String[] args)
{
DefaultMethodClass def = new DefaultMethodClass( );
def.someMethod(); //调用抽象方法
def.DefaultMethod(); //调用默认方法
}
}
2 运行
3 说明
实例化子类DefaultMethodClass的对象时,编译器不知道应该在两个同名的default方法中选择哪一个,因此产生了二义性。因此,一个类实现多个接口时,若接口中有默认方法,不能出现同名的方法。
Java之所以禁止多继承,就是想避免类似的二义性。但是接口中允许实现默认方法,又回到“二义性”的灾难之门。
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
来源:https://blog.csdn.net/chengqiuming/article/details/92397446
0
投稿
猜你喜欢
- Android Studio 在引用外部依赖时,发现一直无法引用外部依赖。刚开始以为是墙的问题,尝试修改Gradle配置,未解决问题。最终发
- 在项目里,我需要做一个Spring Boot结合Thymeleaf前端模版,结合JPA实现分页的演示效果。做的时候发现有些问题,也查了现有网
- 目录1、下面的代码运行的结果是:2、下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是?3、执行如下代码段后,变量s
- 有时候因为安全问题,需要把配置文件的中数据库用户名密码由明文改成密文,大多数其实是为了应付甲方而已。1.pom.xml引入依赖<dep
- 几个月前写过一篇博客《xUtils3.0框架学习笔记》 ,上面也有记录通过xUtils实现文件上传的使用方法,代码如下:private vo
- 在IntelliJ IDEA 中这个查看一个类也就是当前类的所有继承关系,包括实现的所有的接口和继承的类,这个继承,不仅仅是一级的继承关系,
- 一、HashMap初始化方法HashMap() 不带参数,默认初始化大小为16,加载因子为0.75;HashMap(int initialC
- Linux Hadoop 2.7.3 安装搭建Hadoop实现了一个分布式文件系统(Hadoop Distributed File Syst
- mybatis in foreach 双层嵌套需求:根据角色id,返回角色名称,入参是List<List> 类型的二维数组,需要
- Java中线程分为两种类型:用户线程和守护(服务)线程。通过Thread.setDaemon(false)设置为用户线程;通过Thread.
- 具体可见http://developer.android.com/tools/debugging/ddms.html。 DDMS为IDE和e
- 功能:解决web站点的登录,权限验证,授权等功能优点:在不影响站点业务代码,可以权限的授权与验证横切到业务中1、要添加的依赖<!--t
- 一. 线性表中的顺序表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见
- 一、导言1.1 介绍桥接模式及其应用背景桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以
- 一、文件的编码package com.study.io;/*** 测试文件编码*/public class EncodeDemo {/***
- 本文实例讲述了C#中HttpWebRequest的用法。分享给大家供大家参考。具体如下:HttpWebRequest类主要利用HTTP 协议
- 一、前言对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外。二、MyBatis的初始化做了什么2.1 Mybatis的
- 前言本文将带您了解在 Flutter 中制作翻转卡片动画的两个完整示例。第一个示例从头开始实现,第二个示例使用第三方包。闲话少说,让我们动手
- 本文实例为大家分享了Android自定义带圆点的半圆形进度条,供大家参考,具体内容如下仅限用于半圆形,如须要带圆点的圆形进度条,圆点会出现错
- 配置宝塔面板javaweb运行环境详解,若出现404nignx错误也可按此教程进行检查1.准备:(解析成功的域名,本地运行完好的项目,宝塔面