Java接口的方法体

img


为什么这个地方的接口方法🈶方法体啊?
接口中的所有方法不应该是抽象方法吗?

jdk1.8开始,接口中支持定义默认实现的方法
jdk1.8之前不支持,只能定义抽象方法

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/725812
  • 这篇博客你也可以参考下:java中,一个类实现某个接口,必须重写接口中的所有方法吗???
  • 你还可以看下java参考手册中的 java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-注释是元数据的一种形式,为编译器提供信息。本课介绍了在程序中有效使用注释的地方和方法。-类型注解和可插拔类型系统
  • 除此之外, 这篇博客: Java类实现某个接口后,是否需要实现接口中的所有方法?中的 一、业务场景 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    📣 问题描述:Java类实现某个接口后,是否需要实现接口中的所有方法?

    📖 答 : 如果是普通的类,必须去实现接口里所有的方法,如果是抽象类,则可以不去实现。

    在这里插入图片描述

    首先定义一个卖火车票的接口:定义两个方法

    在这里插入图片描述
    创造一个类来实现买票接口,先实现一个方法,很明显idea给出提示爆红

    Class 'TrainStation' must either be declared abstract or implement abstract method 'pay()' in 'SellTickets'

    在这里插入图片描述
    继续实现第二个方法后发现idea去除爆红

    在这里插入图片描述
    我们发现如果该类是抽象类不实现对应方法也不会爆红
    在这里插入图片描述
    如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!

    📝 相关代码感兴趣实践运行

    public interface SellTickets {
    
        void sell();
    
        void pay();
    
    }
    
    /**
     * @version v1.0
     * @ClassName: TrainStation
     * @Description: 火车站类
     * @Author:
     */
    public class TrainStation implements SellTickets {
    
        public void sell() {
            System.out.println("火车站卖票");
        }
    
        @Override
        public void pay() {
             System.out.println("实现pay方法");
        }
    
    }
    

  • 您还可以看一下 范铁钢老师的【超强干货分享】Java程序员算法面试「通关秘籍」课程中的 课程推出原因小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    答案:

    问题:为什么接口中有些方法没有方法体?

    这是因为在接口中定义的方法默认是抽象方法,不需要具体的方法实现,这使得接口成为了一种定义规范和约束的工具,以便其他类进行实现。如果一个类想要实现这个接口,就必须要实现这个接口中的所有抽象方法。

    代码示例:

    public interface ExampleInterface{ void doSomething(); //抽象方法 void doSomethingElse(); //抽象方法 //可以定义常量,不需要关键字final int MAX_COUNT = 100; }

    下面是一个实现了该接口的类:

    public class ExampleClass implements ExampleInterface{ //实现接口中的抽象方法 public void doSomething(){ //具体的方法实现 } public void doSomethingElse(){ //具体的方法实现 } }

    如果一个类实现了接口,但是只实现了其中的部分抽象方法,那么它必须声明为一个抽象类。因此,Java接口中可以定义全局常量、默认方法、静态方法,但是不能定义实例构造函数和普通成员变量。

    参考资料:https://www.runoob.com/java/java-interfaces.html


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^