Bootstrap

Java-接口

1-接口的介绍

  • 接口 : 如果一个类中都是抽象方法 , 那么这个类应该是定义规则的类 , 我们应该把此类定义成接口,接口是一种引用数据类型

  • 作用 :

    • 用于定义规则

    • 程序的扩展性

2- 接口的定义和特点

  • 定义接口的关键字使用interface

    • public interface 接口名{ ... }

  • 类与接口之间的关系是实现关系 , 用关键字implements进行连接

    • public class 类名 implements 接口名 { ... }

  • 接口不能实例化

  • 接口的子类我们叫做实现类

    • 要么重写接口中所有的抽象方法

    • 要么实现类是一个抽象类

  • 注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口,调用逗号分隔 , 还可以继承一个类的同时 , 实现多个接口

3-接口的特性

  • 接口中的方法默认是 public abstract 的,可以省略这些修饰符。
  • 接口中的字段默认是 public static final 的,可以省略这些修饰符。
  • 接口不能被实例化,但可以被实现(类实现接口)。
  • 一个类可以实现多个接口,从而获得这些接口的所有方法规范。

4-接口案例

假设我们有一个接口 Shape,用于表示各种形状的基本行为:

// Shape.java
public interface Shape {
    // 常量声明:接口中的常量默认为 public static final
    double PI = 3.14;

    // 抽象方法声明:所有实现类必须实现这些方法
    double calculateArea();
    double calculatePerimeter();
}

在上面的接口 Shape 中,我们定义了两个抽象方法 calculateArea()calculatePerimeter(),并声明了一个常量 PI。所有实现了 Shape 接口的类都必须提供这两个方法的具体实现。

接下来,我们可以创建几个不同形状的类来实现 Shape 接口,比如 CircleRectangle

// Circle.java
public class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return PI * radius * radius;
    }

    @Override
    public double calculatePerimeter() {
        return 2 * PI * radius;
    }
}
// Rectangle.java
public class Rectangle implements Shape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double calculateArea() {
        return length * width;
    }

    @Override
    public double calculatePerimeter() {
        return 2 * (length + width);
    }
}

现在我们可以在主程序中使用这些类,并根据需要调用接口中定义的方法,而无需关心具体是哪种形状:

// Main.java
public class Main {
    public static void main(String[] args) {
        Shape circle = new Circle(5);
        Shape rectangle = new Rectangle(4, 6);

        System.out.println("Circle area: " + circle.calculateArea());
        System.out.println("Circle perimeter: " + circle.calculatePerimeter());

        System.out.println("Rectangle area: " + rectangle.calculateArea());
        System.out.println("Rectangle perimeter: " + rectangle.calculatePerimeter());
    }
}

在上面的示例中,我们创建了一个 Circle 和一个 Rectangle 对象,并调用了它们的 calculateArea()calculatePerimeter() 方法,这些方法由 Shape 接口定义。这种做法使得我们可以轻松地在不同的形状对象之间切换,并利用接口定义的方法来获取相应的面积和周长,实现了代码的灵活性和可维护性。

5-枚举

枚举(Enumeration)在Java中是一种特殊的数据类型,它允许我们定义一个带有固定常量集合的数据类型。枚举常常用于表示一组相关的常量,比如星期几、月份、状态等。

定义枚举类型

在Java中定义枚举类型非常简单,使用 enum 关键字即可:

// 定义一个枚举类型表示星期几
public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

在上面的例子中,我们定义了一个名为 Day 的枚举类型,包含了一周中的所有天。每个枚举常量都是 Day 类型的实例,可以像访问普通类的静态常量一样使用。

使用枚举类型

一旦定义了枚举类型,我们就可以在程序中使用它们:

public class EnumExample {
    public static void main(String[] args) {
        Day today = Day.MONDAY;
        
        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 another day.");
                break;
        }
    }
}

在上述示例中,我们将 today 设置为 Day.MONDAY,然后使用 switch 语句检查 today 的值,并根据不同的枚举常量执行不同的操作。

枚举方法和属性

枚举类型可以拥有字段、方法和构造函数。例如,我们可以为枚举类型添加字段和方法来提供更多的信息或行为:

public enum Day {
    SUNDAY("Sunday"), MONDAY("Monday"), TUESDAY("Tuesday"), 
    WEDNESDAY("Wednesday"), THURSDAY("Thursday"), FRIDAY("Friday"), 
    SATURDAY("Saturday");

    private String displayName;

    // 构造函数
    Day(String displayName) {
        this.displayName = displayName;
    }

    // 自定义方法
    public String getDisplayName() {
        return displayName;
    }
}

在上面的例子中,我们为每个枚举常量添加了一个 displayName 字段,并提供了一个构造函数来初始化这个字段。还添加了一个 getDisplayName() 方法,以便在需要时获取枚举常量的显示名称。

总结

枚举是Java中一种非常有用的数据类型,它提供了一种更加类型安全和易读的方式来表示固定集合的常量。使用枚举可以提高代码的可读性和可维护性,同时避免使用普通常量集合时可能出现的错误。

;