java 子接口中定义与父接口相同的方法

今天碰到一个很有意思的问题,在java中如果子接口中定义了与父接口中已经有的方法会发生什么事情呢?比如:

interface IRunnable extends Runnable{
	void run();
}

刚开始我还以为这样子的语法应该不能通过编译器,没有想到这样子做编译器并没有做出任何警告。

当然大多数情况下我们都不会这么做,因为这样做似乎没有什么意义。但为了真相,我还是做了个小实现:

public class InterfaceDebug{
	public static void main(String[] args){
		IRunnable irun1=new IRunnableImpl();
		irun1.run();
		Runnable irun=irun1;
		irun.run();
		irun=new IRunnableImpl2();
		irun.run();
	}

}
interface IRunnable extends Runnable{
	void run();
}
class IRunnableImpl implements IRunnable{
	public void run(){
		System.out.println("IRunnable of IRunnableImpl");
	}
}

class IRunnableImpl2 implements Runnable{
	public void run(){
		System.out.println("IRunnable of IRunnableImpl2");
	}
}

运行结果为:

IRunnable of IRunnableImpl
IRunnable of IRunnableImpl
IRunnable of IRunnableImpl2

这样子看到,在IRunnable中定义的run方法其实就是Runnable中的run,它们两是引用同一个东西的,并没有发生方法的覆盖。

时间: 2024-10-13 16:42:38

java 子接口中定义与父接口相同的方法的相关文章

教你在Java接口中定义方法

基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClient,其代码结构如下: import java.time.*; public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int yea

java中接口的定义和接口的实现

1.接口的定义 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量; [public] [abstract] 方法; } 修饰符:可选,用于指定接口的访问权限,可选值为public.如果省略则使用默认的访问权限. 接口名:必选参数,用于指定接口的名称,接口名必

java多线程编程中实现Runnable接口方法相对于继承Thread方法的优势

 java多线程创建方法http://blog.csdn.net/cjc211322/article/details/24999163  java创建多线程方法之间的区别http://blog.csdn.net/cjc211322/article/details/25000449 java多线程编程中实现Runnable接口方法相对于继承Thread方法的优势

“全栈2019”Java第八十五章:实现接口中的嵌套接口

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第八十五章:实现接口中的嵌套接口 下一章 "全栈2019"Java第八十六章:嵌套接口可以多继承吗? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组

1.java.io包中定义了多个流类型来实现输入和输出功能,

1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G)   A.输入流和输出流 B.字节流和字符流 C.节点流和处理流   D.File stream E.Pipe stream F.Random stream G.Filter stream

子组件中定义的方法如何传给父组件调用了呢?

//Food组件(是一个一般组件,就是弹出来那个食物的图片) 父组件中调用子组件对象的方法: 1.要得到子组件对象 通过给子组件 指定ref="Food" 2.在子组件中定义自己的方法: 3.在需要调用的地方: 父向子传递使用props 原文地址:https://www.cnblogs.com/hou-yuan-zhen/p/11740968.html

lua中定义操作符行为的元方法(重载操作符)

在c++中可以重载操作符,在lua中也有,不过lua是通过元方法实现的,异曲同工,都是一样的 比如c++,重载了+之后,具体做什么都是自己实现,lua也一样 定义操作符行为的元方法有: __add 对应的运算符 '+'.  可以定义已定义操作符的表和其他表相加的行为,以及操作的值(返回值)(下同) __sub 对应的运算符 '-'. __mul 对应的运算符 '*'. __div 对应的运算符 '/'. __mod 对应的运算符 '%'. __unm 对应的运算符 '-'. 可以定义已定义操作符

在System.Object中定义的三个比较方法有何异同

分析问题 在本书前面的章节中,笔者已经介绍过System.Object中的所有方法.而其中有三个方法被设计用来进行对象的比较,它们是: (1).static bool ReferenceEquals(object A,object B). (2).static bool Equals(object A, object B). (3).virtual bool Equals(object obj). 1.静态方法:ReferenceEquals实现了类型的引用比较,从参数类型可以看出,它不仅可以用

Java SE环境中测试JPA实体的简单方法

Java SE环境中测试JPA实体的简单方法 出于软件质量的考虑,理论上来说我们写的一切代码都要经过测试.JPA的测试不像普通的组件那么方便,因为JPA涉及到数据库,所以集成测试必不可少,像Arquillian这样的测试框架能处理比较复杂的集成测试,但是它的配置相对也更复杂一点,所以本篇文章主要讲一下在Java SE环境中较简单地测试JPA实体(Entity)的方法. 我们需要实现的目标有:1.不需要mysql这样需要额外安装的数据库:2.在SE环境中可以直接测试. 相关工具我们主要用到JUni