Java接口继承接口是一种特殊的继承关系,它允许一个接口从另一个接口中继承方法和常量。Java中的接口继承是单一的,也就是说,一个接口只能从一个接口中继承。
Java中的接口继承使用extends关键字来实现,如下所示:
interface A { // 方法声明 } interface B extends A { // 方法声明 }
在上面的代码中,我们定义了两个接口A和B。B从A中继承了方法和常量。因此,B包含A中定义的方法和常量。
Java不允许多重继承(即一个子接口不能同时从多个超级接口中继承方法和常量)。但是,Java允许多重实现(即一个子抽象不能同时从多个超级抽象中实例化方法和常量)。
在Java 8之前,Java不允许在一个抽象或者非静态内部内部声明静态方法。但是在Java 8之后,这已成为了有效的语法形式。因此,在Java 8之后,我们也能够将静态方法声明到子抽象或者子内部内部中去。
此外,在 Java 9 之前, Java 允许将 private 方法声明到子内部内部, 而 Java 9 启用了 private 方法的强制覆盖, 因此, 在 Java 9 之后, 我们也能将 private 方法声明到子内部内部.
总而言之, Java 的抽象和内部内部机制使得我们能够将方法和常量传递到子对象, 考虑到这些特性, 我们应该尽量使用这些特性来优化代码.
接口可以从另一个接口继承。与类不同,接口可以从多个接口继承。
interface Singer { void sing(); void setRate(double rate); double getRate(); } interface Writer { void write(); void setRate(double rate); double getRate(); } interface Player { void play(); void setRate(double rate); default double getRate() { return 300.0; } }
一个接口使用关键字extends来继承自其他接口。关键字extends之后是以逗号分隔的继承接口名称列表。
继承的接口称为超级接口,继承接口的接口称为子接口。
接口继承其超级接口的以下成员:
接口不从其超级接口继承静态方法。
接口可以重写它从其超级接口继承的继承的抽象和默认方法。
如果超级接口和子接口具有相同名称的字段和嵌套类型,则子接口获胜。
interface A { String s = "A"; } interface B extends A { String s = "B"; } public class Main { public static void main(String[] argv){ System.out.println(B.s); } }
以下代码显示如何重写默认方法。
interface A { default String getValue(){ return "A"; } } interface B extends A { default String getValue(){ return "B"; } } class MyClass implements B{ } public class Main { public static void main(String[] argv){ System.out.println(new MyClass().getValue()); } }
上面的代码生成以下结果。
引入默认方法使得类可以从其超类和超级接口继承冲突的实现。
Java使用三个简单的规则为了解决冲突。
我们可以使用instanceof运算符来评估引用类型变量是指特定类的对象还是其类实现特定接口。
instanceof运算符的一般语法是
referenceVariable instanceof ReferenceType
interface A { default String getValue(){ return "A"; } } interface B { default String getValue(){ return "B"; } } class MyClass implements B,A{ public String getValue(){ return "B"; } } public class Main { public static void main(String[] argv){ MyClass myClass = new MyClass(); System.out.println(myClass instanceof MyClass); System.out.println(myClass instanceof A); System.out.println(myClass instanceof B); } }
上面的代码生成以下结果。
Java数据类型教程 -Java数字数据类型字节,短整数,整数,长整数,浮点数和双精度类是数字包装类。它们都继承自抽象的Number类。...
JavaFX教程 -JavaFX VBoxVBox布局将子节点堆叠在垂直列中。新添加的孩子被放置在上一个子节点的下面。默认情况下,VBox尊重孩子...
JavaFX教程 -JavaFX事件点击按钮通常会触发事件。例如,点击我们打印对话框上的打印按钮以将文档打印到打印机。UI库使用事件来通...