接口
在 Java 中,实现抽象的另一种方式是使用接口。
接口定义
接口是一个完全抽象的类,用于将具有空方法体的相关方法分组:
1// 接口 2interface Animal { 3 public void animalSound(); // 接口方法(没有具体实现体) 4 public void run(); // 接口方法(没有具体实现体) 5}
实现接口
要访问接口方法,必须使用 implements 关键字(而不是 extends)由另一个类“实现”(有点类似于继承)。接口方法的具体实现体由“实现”类提供:
1// 接口 2interface Animal { 3 public void animalSound(); // 接口方法(没有具体实现体) 4 public void sleep(); // 接口方法(没有具体实现体) 5} 6 7// Pig “实现” Animal 接口 8class Pig implements Animal { 9 public void animalSound() { 10 // animalSound()的具体实现体在这里提供 11 System.out.println("The pig says: wee wee"); 12 } 13 public void sleep() { 14 // sleep()的具体实现体在这里提供 15 System.out.println("Zzz"); 16 } 17} 18 19class Main { 20 public static void main(String[] args) { 21 Pig myPig = new Pig(); // 创建一个 Pig 对象 22 myPig.animalSound(); 23 myPig.sleep(); 24 } 25}
接口注意事项
- 与抽象类一样,接口不能用于创建对象(在上面的示例中,无法创建“Animal”对象)
- 接口方法没有具体的实现体 - 实现体由“实现”类提供
- 在实现接口时,必须重写其所有方法
- 接口方法默认为抽象和公共的
- 接口属性默认为公共、静态和最终的
- 接口不能包含构造函数(因为它不能用于创建对象)
何时使用接口?
-
为了实现安全性 - 隐藏对象的某些细节,仅显示其重要细节(接口)。
-
为了实现多重继承 - Java 不支持“多重继承”(一个类只能继承自一个超类)。但是,它可以通过接口实现,因为类可以实现多个接口。注意:要实现多个接口,请用逗号分隔它们(见下面的示例)。
多个接口
要实现多个接口,请用逗号分隔它们:
1interface FirstInterface { 2 public void myMethod(); // 接口方法 3} 4 5interface SecondInterface { 6 public void myOtherMethod(); // 接口方法 7} 8 9class DemoClass implements FirstInterface, SecondInterface { 10 public void myMethod() { 11 System.out.println("Some text.."); 12 } 13 public void myOtherMethod() { 14 System.out.println("Some other text..."); 15 } 16} 17 18class Main { 19 public static void main(String[] args) { 20 DemoClass myObj = new DemoClass(); 21 myObj.myMethod(); 22 myObj.myOtherMethod(); 23 } 24}
接口的优势
- 接口可以促进代码的重用。
- 接口可以提高代码的可读性和可维护性。
- 接口可以实现解耦,使代码更灵活。
总结
接口是 Java 中重要的概念,它们可以帮助您编写更安全、更可重用、更灵活和更易于维护的代码。
枚举(Enums)
枚举是一个特殊的“类”,表示一组常量(不可更改的变量,如 final 变量)。
创建枚举
要创建一个枚举,请使用 enum 关键字(而不是 class 或 interface),并用逗号分隔常量。注意,它们应该使用大写字母:
1enum Level { 2 LOW, 3 MEDIUM, 4 HIGH 5}
您可以使用点语法访问枚举常量:
1Level myVar = Level.MEDIUM;
Enum 是“enumerations”的缩写,意思是“具体列举”。
在类内部定义枚举
您还可以在类内部定义枚举:
1public class Main { 2 enum Level { 3 LOW, 4 MEDIUM, 5 HIGH 6 } 7 8 public static void main(String[] args) { 9 Level myVar = Level.MEDIUM; 10 System.out.println(myVar); 11 } 12}
输出将是:
1MEDIUM
在 Switch 语句中使用枚举
枚举常用于 switch 语句中,以检查相应的值:
1enum Level { 2 LOW, 3 MEDIUM, 4 HIGH 5} 6 7public class Main { 8 public static void main(String[] args) { 9 Level myVar = Level.MEDIUM; 10 11 switch(myVar) { 12 case LOW: 13 System.out.println("Low level"); 14 break; 15 case MEDIUM: 16 System.out.println("Medium level"); 17 break; 18 case HIGH: 19 System.out.println("High level"); 20 break; 21 } 22 } 23}
输出将是:
1Medium level
遍历枚举
枚举类型具有 values() 方法,该方法返回所有枚举常量的数组。当您想要遍历枚举的常量时,此方法非常有用:
1for (Level myVar : Level.values()) { 2 System.out.println(myVar); 3}
输出将是:
1LOW 2MEDIUM 3HIGH
枚举与类的区别
枚举可以像类一样具有属性和方法。唯一的区别是枚举常量是 public、static 和 final(不可更改的 - 不能被覆盖)的。
枚举不能用于创建对象,也不能扩展其他类(但可以实现接口)。
何时以及为何使用枚举?
当您知道值不会更改时
,比如月份天数、星期几、颜色、扑克牌等,可以使用枚举。
使用枚举可以使代码更易读、更易维护,并避免使用 final 变量和 switch 语句中的字符串。
枚举的优势:
- 可读性强
- 易于维护
- 安全性高
- 代码简洁
总结:
枚举是 Java 中一种强大的工具,可以用来表示一组常量。它们易于使用和理解,并且可以使您的代码更易读、更易维护。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
