首页 > 编程语言 >Java 接口interface

Java 接口interface

时间:2024-09-20 10:22:57浏览次数:13  
标签:静态方法 void 接口 MyInterface interface Java 方法 public

目录

1.定义接口

2.实现接口

3.多重继承

4.抽象方法

5.默认方法

6.静态方法

7.私有方法

8.常量


在Java中,接口(interface)是一种引用类型,它类似于类(class),但是与类不同的是,接口不能包含任何具体的方法实现(除了默认方法和静态方法之外)。接口定义了一组规则或行为,这些规则由实现该接口的类来提供具体的实现。接口可以看作是类之间的一种契约,规定了类应该具有哪些方法。

以下是关于Java接口的一些关键点:

1.定义接口

使用interface关键字来定义一个接口。

public interface MyInterface {
    void method1();
    int method2(String param);
}
2.实现接口

类使用implements关键字来实现一个或多个接口,并且必须为接口中的所有抽象方法提供实现。

public class MyClass implements MyInterface {
    @Override
    public void method1() {
        // 实现代码
    }

    @Override
    public int method2(String param) {
        // 实现代码
        return 0;
    }
}
3.多重继承

Java类不支持多重继承,但可以通过实现多个接口来达到类似的效果。

public class MultiInheritClass implements Interface1, Interface2 {
    // 必须实现两个接口的所有方法
}
4.抽象方法

抽象方法是接口中最基本的方法类型。它们没有方法体(即没有实现),并且默认是publicabstract的。实现该接口的类必须提供这些方法的具体实现。

public interface MyInterface {
    // 抽象方法
    void myMethod();  // 等同于 public abstract void myMethod();
}
5.默认方法

从Java 8开始,接口可以有默认方法实现。这样做的目的是为了向后兼容,允许在不破坏现有实现的情况下添加新方法。

以下是关于如何定义和使用接口中的默认方法的一些示例:

定义默认方法

在接口中,你可以通过default关键字来定义一个默认方法。例如:

public interface MyInterface {
    // 抽象方法
    void abstractMethod();

    // 默认方法
    default void defaultMethod() {
        System.out.println("This is a default method.");
    }

    // 另一个默认方法
    default void anotherDefaultMethod(int number) {
        System.out.println("The number is: " + number);
    }
}

实现接口并使用默认方法

当你有一个实现了上述接口的类时,你可以选择是否重写默认方法。如果不重写,默认方法的实现将被继承。

public class MyClass implements MyInterface {
    @Override
    public void abstractMethod() {
        System.out.println("Implementing the abstract method.");
    }

    // 这里可以选择性地重写defaultMethod
    // 如果没有重写,则会使用接口中提供的默认实现
}

public class Main {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.abstractMethod();  // 输出: Implementing the abstract method.
        myClass.defaultMethod();   // 输出: This is a default method.
        myClass.anotherDefaultMethod(42);  // 输出: The number is: 42
    }
}

在这个例子中,MyClass实现了MyInterface,但并没有重写defaultMethodanotherDefaultMethod,因此这两个方法将使用接口中提供的默认实现。

重写默认方法

如果需要不同的行为,你可以在实现类中重写默认方法:

public class AnotherClass implements MyInterface {
    @Override
    public void abstractMethod() {
        System.out.println("Another implementation of the abstract method.");
    }

    @Override
    public void defaultMethod() {
        System.out.println("Overriding the default method in AnotherClass.");
    }
}

public class Main {
    public static void main(String[] args) {
        AnotherClass anotherClass = new AnotherClass();
        anotherClass.abstractMethod();  // 输出: Another implementation of the abstract method.
        anotherClass.defaultMethod();   // 输出: Overriding the default method in AnotherClass.
    }
}

在这个例子中,AnotherClass重写了defaultMethod,因此当调用这个方法时,将执行新的实现而不是接口中的默认实现。

默认方法为接口提供了更多的灵活性,使得在保持二进制兼容性的同时能够扩展接口的功能。这在库的设计中尤其有用,因为它允许库维护者增加新的功能而不影响现有的客户端代码。

6.静态方法

从Java 8开始,接口也可以包含静态方法。这些方法也是public的。下面是一个简单的例子来展示如何在接口中定义和使用静态方法。

定义接口并包含静态方法

public interface MyInterface {
    // 抽象方法
    void myMethod();

    // 默认方法
    default void defaultMethod() {
        System.out.println("This is a default method.");
    }

    // 静态方法
    static void staticMethod() {
        System.out.println("This is a static method in MyInterface.");
    }
}

使用静态方法

静态方法可以通过接口名直接调用,不需要任何实现类。下面是如何在主程序中调用这个静态方法:

public class Main {
    public static void main(String[] args) {
        // 直接通过接口名调用静态方法
        MyInterface.staticMethod();  // 输出: This is a static method in MyInterface.

        // 创建接口的实现类实例
        MyInterface myInstance = new MyClass();
        
        // 调用抽象方法
        myInstance.myMethod();  // 输出: Implementing myMethod from MyInterface
        
        // 调用默认方法
        myInstance.defaultMethod();  // 输出: This is a default method.
    }
}

// 实现接口的类
class MyClass implements MyInterface {
    @Override
    public void myMethod() {
        System.out.println("Implementing myMethod from MyInterface");
    }
}

通过这种方式,你可以在接口中定义静态方法,并在需要时直接通过接口名调用这些方法。这在提供工具方法或辅助功能时非常有用。

7.私有方法

从Java 9开始,接口可以拥有私有方法,这些私有方法主要用于帮助默认方法或静态方法内部实现逻辑,并且不能被外部访问。私有方法有两种形式:普通私有方法和私有静态方法。

普通私有方法:普通私有方法可以在接口的默认方法或静态方法中使用,但不能直接从接口的外部调用。

私有静态方法:私有静态方法同样只能在接口内部使用,用于辅助静态方法的实现。

下面是一个简单的例子来展示如何在接口中定义和使用私有方法:

public interface MyInterface {
    // 抽象方法
    void myMethod();

    // 默认方法
    default void defaultMethod() {
        System.out.println("This is a default method.");
        privateHelper(); // 调用私有方法
    }

    // 静态方法
    static void staticMethod() {
        System.out.println("This is a static method in MyInterface.");
        privateStaticHelper(); // 调用私有静态方法
    }

    // 私有方法
    private void privateHelper() {
        System.out.println("This is a private helper method.");
    }

    // 私有静态方法
    private static void privateStaticHelper() {
        System.out.println("This is a private static helper method.");
    }
}

// 实现接口的类
class MyClass implements MyInterface {
    @Override
    public void myMethod() {
        System.out.println("Implementing myMethod from MyInterface");
    }
}

// 主程序
public class Main {
    public static void main(String[] args) {
        // 创建接口的实现类实例
        MyInterface myInstance = new MyClass();
        
        // 调用默认方法
        myInstance.defaultMethod();  // 输出:
                                     // This is a default method.
                                     // This is a private helper method.

        // 调用静态方法
        MyInterface.staticMethod();  // 输出:
                                     // This is a static method in MyInterface.
                                     // This is a private static helper method.
    }
}

通过这种方式,你可以在接口中定义私有方法和私有静态方法,以帮助实现更复杂的逻辑,同时保持接口的封装性和清晰性。这有助于减少代码重复,并提高代码的可维护性。

8.常量

接口中的字段自动隐式地是public static final,即它们是公共的、静态的和最终的(不可改变)。当你声明一个字段时,即使你不显式地指定这些修饰符,编译器也会自动添加它们。

public interface Constants {
    int MAX = 100;  // 自动是 public static final
}

你不能改变这个行为来使用不同的访问级别或去掉staticfinal修饰符。也就是说,在接口中声明的字段总是会被视为常量,并且必须在声明时初始化。

如果你尝试显式地给接口中的字段加上非public static final的修饰符,编译器会报错。例如,下面的代码会导致编译错误:

public interface MyInterface {
    // 错误:不能修改为private
    private int MY_CONSTANT = 10;

    // 错误:不能修改为non-final
    int ANOTHER_CONSTANT;
}

而显示指定public static final三个中任意一个修饰符都是合法的,因为这与默认行为一致。

标签:静态方法,void,接口,MyInterface,interface,Java,方法,public
From: https://blog.csdn.net/weixin_47363690/article/details/142375977

相关文章

  • 基于Java中的SSM框架实现个人网站管理平台项目【项目源码+论文说明】
    基于java中的SSM框架实现在线个人网站管理平台演示【内附项目源码+LW说明】摘要随着社会及个人社交应用平台的飞速发展,人们的沟通成本逐渐降低,互联网信息的普及也进一步提升了人们对于信息的需求度,通过建立个人网站的方式来展示自己的生活信息同时利用平台结交新的朋友,借......
  • Java花店在线销售及数据分析系统的设计与实现
    太原理工花店在线销售及数据分析系统的设计与实现计算机毕业设计案例基于Java的建筑废弃物管理系统基于ASP.NET的OA系统基于Java的企业质量业绩管理系统Java北方民族大学停车场管理系统基于Java的产品成本管理系统基于PHP的学生事务管理系统Java健身俱乐部基于Java......
  • JavaScript语法入门8 JavaScript中的三种引号
    JavaScript中三种引号,分别是单引号(’xx’)、双引号("xx”)、反引号(`xx`)。三种引号中,单引号和双引号的作用是相同的,用于定义字符串。而反引号是一种扩展功能。单引号、双引号单引号、双引号包裹起来的值是字符串,按照惯例,单引号或者双引号必须成对使用,不能交叉使用。 正确示例:letnam......
  • Java 在 GIS 领域的学习路线?
    Java是一门广泛应用于企业级开发的编程语言,而GIS则是一种常用于地理信息处理和分析的技术。将Java与GIS结合起来,可以在企业级应用中实现更多的功能和业务需求,且在实际领域越来越广泛。Java在GIS中重要的作用1、跨平台性Java具有跨平台的特性,Java在地理信息系统(GIS)领域发挥......
  • Java中的设计模式
    最近在做Java笔试题时看到一道关于Java设计模式的,Java的设计模式有很多,这里来给大家普及一下:Java中的设计模式(DesignPatterns)是软件开发人员在软件开发过程中面临的一般至重复出现的问题的解决方案。它们是一种经过分类编目的、可复用的、经过良好测试的设计方案,通常用于解决常......
  • java重点学习-JVM类加载器+垃圾回收
    12.7类加载器JVM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。类加载器有哪些启动类加载器(BootStrapClassLoader):加载JAVAHOME/jre/lib目录下的库扩展类加载器(ExtClassLoader):主要加载JAVAHOME/jre/lib/ext目录中的类......
  • 基于Java+SpringBoot+Vue的桂林旅游景点导游平台
    前言✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • 基于JAVA+SpringBoot+Vue的欢迪迈手机商城设计与开发
    前言✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • Java 初学 day03
    java031、if判断语句1、定义语句1选择结构:if选择语句switch选择语句if选择语句:语句定义格式1:if(关系表达式){语句体;}注意注意事项:1、if小括号中的语句,可以很复杂,但是最终的结果一定是boolean类型2、只有当if语......
  • Java中的图神经网络:如何在大规模图数据中实现嵌入学习
    Java中的图神经网络:如何在大规模图数据中实现嵌入学习大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!近年来,图神经网络(GraphNeuralNetworks,GNN)在处理图结构数据上取得了显著进展,尤其是在社交网络、推荐系统、知识图谱等领域。与传统的神经网络......