首页 > 编程语言 >Java中interface的default和static方法

Java中interface的default和static方法

时间:2024-07-18 19:18:25浏览次数:12  
标签:default 接口 static SubClass interface 父类 方法

Java中interface的default和static方法

Java中interface的default和static方法

完整代码及其运行结果

package demo;
public class StaticandDefaultMethod {
	public static void main(String[] args) {
		Interface I = new SubClass();
		SuperClass SuperC = new SubClass();
		SubClass SubC = new SubClass();
		System.out.println("============调用d()============");
		I.d();
		SuperC.d();
		SubC.d();
		System.out.println("\n===========实例调用s()===========");
//		I.s();
		SuperC.s();
		SubC.s();
		System.out.println("\n===========直接调用s()===========");
		Interface.s();
		SuperClass.s();
		SubClass.s();	
	}	
}
//接口
interface Interface{
	default void d() {
		/**
		 * 接口的default方法d()
		 */
		System.out.println("Interface.d()");
	}
	static void s() {
		/**
		 * 接口的static方法s()
		 */
		System.out.println("Interface.s()");
	}
	static void s1() {
	}
}
//父类
abstract class SuperClass{
	static void s() {
		/**
		 * 父类的static方法s()
		 */
		System.out.println("SuperClass.s()");
	}
	void d() {
		/**
		 * 父类的d()方法
		 */
		System.out.println("SuperClass.d()");
	}
}
class SubClass extends SuperClass implements Interface{
	@Override
	public void d() {
		/**
		 * 若父类与接口有同名方法,则继承优先级父类高于接口
		 * 同时default是public,若父类同名方法不是public,则子类需实现一个public的同名方法
		 */	
		System.out.print("SubClass.d() and ");
		super.d();
	}
//	@Override
	/**
	 * 子类不能继承接口的static方法,可以继承、不能覆写父类的static方法
	 * The method s() of type SubClass must override or implement a supertype method
	 */
	static void s() {
		System.out.println("SubClass.s()");
	}
}
 

从 Java8 开始:

Java8开始,接口中可以用 default 或 static 关键字修饰方法(不能同时用)且非抽象方法。

static 方法:

接口不能通过实例调用 static 方法

接口不能通过实例调用 static 方法,但是抽象方法可以通过实例调用 static 方法。
报错:This static method of interface Interface can only be accessed as Interface.s
关于 SuperC 为什么是调用 SuperClass 的 s() 而不是 SubClass 的 s() ,个人猜测 “或许是因为 static 方法不能被覆写?” 如果有大神知道的,麻烦说一下,谢谢。
在这里插入图片描述
在这里插入图片描述

接口中的 static 方法不能被继承

子类不能继承接口的static方法,可以继承、不能覆写父类的static方法。

将 SuperClass 和 SubClass 中的 s() 方法注释:
注释 SuperClass 的 s()

注释 SubClass 的 s()
接着看到报错:( SubClass 类中未定义 s() 方法)
不能继承接口的 static 方法
接着取消 SuperClass 中 s() 方法的注释,运行结果
在这里插入图片描述
显然 SubClass 继承了 SuperClass 的 s() 方法。

然后,我们取消 SubClass 中 s() 方法的注释,并尝试覆写 s() 方法:
覆写 s()

可以看到报错:

The method s() of type SubClass must override or implement a supertype method
  • 1

default 方法:

default 关键字只能用于接口中修饰接口的方法。

接口的 default 方法可以被继承,但是若父类有与 default 同名的方法,则子类会继承父类的方法。

注释 SubClass 中的 d() ,同时注意父类中的d() 须为public在这里插入图片描述
运行结果在这里插入图片描述

接着看在这里插入图片描述
接口方法默认修饰: public abstract 。

原文链接:https://blog.csdn.net/liu18783800884/article/details/110003627

标签:default,接口,static,SubClass,interface,父类,方法
From: https://www.cnblogs.com/sunny3158/p/18310282

相关文章

  • Go踩坑:interface{}判断nil
    问题背景在实习的一次真实程序开发中,我编写了一个函数,其处理一个接口类型(interface{})的参数,根据其类型返回一个字符串。在传入的参数为nil时,我希望通过判断,返回空字符串。看看我的大致代码:funcmain(){ varp*int64 fmt.Println(defaultValueFn(p))//p未赋值,我希望返回......
  • public interface View接口和public interface ViewResolver接口介绍
    在SpringMVC中,publicinterfaceView和publicinterfaceViewResolver是两个相互关联但功能不同的接口。它们共同在视图解析和渲染过程中发挥作用,但各自承担的责任不同。View接口View接口定义了如何渲染一个特定的视图。它通常包含一个render方法,该方法接受一个Model......
  • jpa报错 Failed to initialize JPA EntityManagerFactory: Unable to instantiate de
    报错2024-07-1711:18:57.558[][main]o.h.dialect.Dialect:HHH000400:Usingdialect:org.hibernate.dialect.MySQL5InnoDBDialect2024-07-1711:18:57.729[][main]tyManagerFactoryBean:FailedtoinitializeJPAEntityManagerFactory:......
  • vue3 widthDefaults 设置props默认值
    测试代码<template><divclass="box"><div><i-ep-edit/></div><div><i-ep-chat-dot-round/></div><div><i-ep-close/></div></div></template><scriptl......
  • auto,static,const,extern,volatile,register
    auto关键字用于声明变量的生存期为自动,auto修饰的是自动类型的变量,对于局部变量默认就是自动类型的变量,如果没有赋初值它的值就是随机值。static 修饰的变量或者函数有如下特点:static修饰的局部变量,可以延长变量的生命周期(不会被多次初始化)static修饰的全局变量或者函数只......
  • Typescript 中 interface 和 type 的区别
    在TypeScript中,interface​和type​是用来描述对象结构或类型的两种主要方式,它们有一些区别和各自的特点。Interface(接口)定义方式:使用interface​关键字定义,例如:interfacePerson{name:string;age:number;}适用场景:主要用于描述对象的形状(Sh......
  • Windows图形界面(GUI)-DLG-C/C++ - 静态控件(Static)
    公开视频-> 链接点击跳转公开课程博客首页-> ​​​​​​链接点击跳转博客主页目录静态控件(Static)控件样式消息处理实例代码静态控件(Static)控件样式文本(Text):用来显示文本信息。可以是简单的一行文本或者复杂的格式化文本。图标(Icon):用来显示一个小图标,常用......
  • 面向3-static、代码块、静态导入包,abstract(抽象类),interface(接口)、implements(接口
    static、代码块、静态导入包,abstract(抽象类),interface(接口)、implements(接口实现方式)static详解//staticpackageoop;publicclassF1{privatestaticintage;//静态的变量privatedoublescore;//非静态的变量publicvoidrun(){go();//当前......
  • C语言中关键字static
    前言    在C语言中,static 是一个关键字,它可以用在不同的上下文中,赋予变量或函数不同的意义。static 关键字主要用于控制变量的存储期和可见性,以及函数的链接性。下面是 static 关键字的主要作用原理与用途:局部静态变量    当 static 修饰局部变量时(即......
  • static块执行时机
    不是类被加载的时候就执行,而是类初始化的时候才被执行。类初始化有以下几种情况:当一个类被主动使用时,Java虚拟就会对其初始化,如下六种情况为主动使用:当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)当调用某个类的静态方法时当使用某个类或接口的静态字段时当调用Java......