【前端学java】Java中的接口和枚举概念(8)

简介: 【8月更文挑战第9天】Java中的接口和枚举概念(8)

如果你是一名前端开发者,并且熟悉TS的话,接口(Interface)概念你一定非常熟悉,枚举肯定也是信手拈来。

interface People {
   
    age:number,
    name:string
}

let peple:People = {
   
    age:18,
    name:"shixiaoshi"
}

上述代码就是前端接口使用的一个简单演示,Java中,接口和枚举的概念几乎是一致的。现在,我们来学习一下java中的接口概念。

Java中的接口

基础概念

在Java中,接口(Interface) 是一种抽象类型,它定义了一组抽象方法常量字段,简单来说,就是提前定义了类的结构用来约束类的创建。

如果你明白TypeScript,那么接口的概念理解起来,也轻而易举。

一个简单的Demo如下

// 接口的定义
interface Car {
   
    // 声明抽象方法
    void run();
}

定义接口

  • 使用interface关键字来定义接口,接口的命名通常以大写字母开头,符合驼峰命名规则。
  • 接口中可以包含抽象方法和常量字段,但不能包含具体实现的方法和实例变量(即成员变量)。
  • 方法在接口中默认为public abstract,字段默认为public static final,可以省略这些修饰符。
// 接口的定义
interface Car {
   
    // 声明抽象方法
    void run();
    // 接口中的常量,默认为 public static final
    int money = 12345;
}

实现接口

  • 使用implements关键字来让类实现一个或多个接口。一个类可以同时实现多个接口,用逗号分隔。
  • 实现接口时,类必须提供接口中定义的所有抽象方法的具体实现,否则该类必须被声明为抽象类。
  • 实现接口的类可以拥有自己的其他成员变量和方法,但它必须实现接口中定义的所有方法

示例代码:

// 接口的定义
interface Car {
   
    // 声明抽象方法
    void run();
    // 接口中的常量,默认为 public static final
    int money = 12345;
}

// 实现接口
class Benchi implements Car {
   
    public void run() {
   
        System.out.println("run.....");
    }
}

接口的继承

在Java中,接口也可以像类一样进行继承,即一个接口可以继承自另一个或多个接口。接口继承使用关键字extends

// 接口的定义
interface Car {
   
    // 声明抽象方法
    void run();
    // 接口中的常量,默认为 public static final
    int money = 12345;
}

// 实现接口
class Benchi extends Car {
   
    // 子接口新增的抽象方法
}

在接口继承中,子接口将包含父接口的所有抽象方法和常量字段,并且子接口可以添加自己的抽象方法,但不能添加具体实现的方法。

接口中的默认方法

在Java 8中引入了默认方法(default method),可以在接口中提供具体的方法实现。

  • 默认方法使用default关键字来定义,允许接口在不破坏现有实现的情况下添加新的方法。
  • 实现类不强制重写默认方法,但仍可以选择重写以覆盖默认实现。
// 定义一个接口
interface MyInterface {
   
    int count = 100; // 常量字段,默认为 public static final

    void abstractMethod(); // 抽象方法,默认为 public abstract

    default void defaultMethod() {
   
        // 默认方法,提供默认实现
        System.out.println("默认方法.....");
    }
}

// 类实现接口
class MyClass implements MyInterface {
   
    public void abstractMethod() {
   
        System.out.println("Abstract method implementation.");
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        MyClass obj = new MyClass();
        obj.abstractMethod(); // 调用抽象方法的实现
        obj.defaultMethod();  // 调用默认方法的实现
        System.out.println(MyInterface.count); // 访问接口中的常量
    }
}

接口中的静态方法

  • 在Java 8中引入了静态方法,使用static关键字来定义。
  • 静态方法只能在接口中定义,不能在实现类中被重写。
// 定义一个接口
interface MyInterface {
   
    // 静态方法,不可重写
    static void staticMethod() {
   
        System.out.println("这是静态方法");
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        MyInterface.staticMethod(); // 调用接口中的静态方法
    }
}

java中的枚举

什么是枚举

在Java中,枚举(Enum) 是一种特殊的数据类型,用于定义一组常量,这些常量在代码中是固定且有限的。

Java中的枚举通过关键字enum进行声明,我们看一个示例:

// 定义一个枚举
enum DayOfWeek {
   
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

public class Main {
   
    public static void main(String[] args) {
   
        // 使用枚举类型的常量
        DayOfWeek today = DayOfWeek.MONDAY;

        // 使用switch语句处理枚举
        switch (today) {
   
            case MONDAY:
                System.out.println("Today is Monday.");
                break;
            case TUESDAY:
                System.out.println("Today is Tuesday.");
                break;
                // 其他的case...
            default:
                System.out.println("Today is some other day.");
        }
    }
}

这个和ts中的枚举概念用法其实是一致的。

枚举的valueOf和values方法(了解)

Java编译器会为每个枚举类型生成valueOfvalues方法。valueOf方法用于将枚举常量的名称转换为对应的枚举实例,values方法返回包含所有枚举常量的数组。

示例代码:

enum Color {
   
    RED,
    GREEN,
    BLUE
}

public class Main {
   
    public static void main(String[] args) {
   
        // 使用valueOf将字符串转换为枚举实例
        Color color = Color.valueOf("RED");
        System.out.println("Color: " + color);

        // 使用values获取所有枚举实例
        Color[] colors = Color.values();
        for (Color c : colors) {
   
            System.out.println(c);
        }
    }
}

枚举的构造函数和字段(了解)

枚举可以像普通类一样拥有构造函数,并且每个枚举常量都可以有自己的字段和方法。每个枚举常量在定义时都必须调用构造函数,并为字段赋值。

示例代码:

javaCopy code
enum Size {
   
    SMALL("S", 10),
    MEDIUM("M", 20),
    LARGE("L", 30);

    private final String abbreviation;
    private final int value;

    Size(String abbreviation, int value) {
   
        this.abbreviation = abbreviation;
        this.value = value;
    }

    public String getAbbreviation() {
   
        return abbreviation;
    }

    public int getValue() {
   
        return value;
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        Size size = Size.MEDIUM;
        System.out.println("Size: " + size);
        System.out.println("Abbreviation: " + size.getAbbreviation());
        System.out.println("Value: " + size.getValue());
    }
}

枚举的构造函数只能是private访问权限,这样可以保证枚举常量只能在枚举内部进行实例化。

相关文章
|
3月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
250 1
|
3月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
243 4
|
4月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
180 11
|
5月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
352 23
|
5月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
5月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
5月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
325 12
|
5月前
|
Java API 网络架构
java调用api接口自动判断节假日信息
java调用api接口自动判断节假日信息
1996 0
|
5月前
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
483 2
|
6月前
|
存储 缓存 NoSQL
java 集合入门基础理论的核心概念与实用长尾知识
本文介绍了Java集合框架的基础理论知识,包括单列集合(List、Set、Queue)和双列集合(Map)的特点及常用实现类(如ArrayList、HashSet、HashMap等)。详细讲解了集合的遍历方式(迭代器、增强for循环、Lambda表达式)和典型应用场景(如数据去重、键值存储等)。通过具体代码示例,帮助初学者理解集合框架的核心概念和实际应用,为Java编程中的数据存储与管理提供基础指导。
182 0