关于接口interface和new关键字

本文探讨了在Java中如何利用接口创建接口数组,虽然不能直接实例化接口来创建对象,但可以通过接口数组的形式使用接口,文中通过具体示例展示了这一特性。
 今天看到在看DOM4J的源码是,在接口时,我看到一个很用意思的东西。
  通常我们在理解接口时,是不能创建实体对象(即interface不能创建对象),但是接口可以创建接口数组
  public interface Text{
       void read();
  }
  public class TextImp implements Text{

      public void read(){
             System.out.println("你好");  
     }
  }
  通常我们不能这样创建这样的对象,如Text t=new Text()。我们的这样创建对象Text t1=new TextImpl();
  但是我们可以创建接口数组Text[] 1=new Text[12];

<think>嗯,用户让我详解Java中的interface关键字,我需要先回顾一下接口的基本概念用法。首先,接口在Java中是用来定义行为的,它允许类实现多个接口,实现多重继承的效果。用户可能已经知道一些基础,但需要更深入的解释,包括语法、特性以及最佳实践。 接下来,我得考虑接口的组成部分。Java 8之后接口可以包含默认方法静态方法,这可能是一个重点。还有Java 9引入的私有方法,这些都需要涵盖进去。用户可能想知道这些新特性如何影响接口的设计使用。 然后,用户可能想知道接口与抽象类的区别,这也是常见的问题。需要对比两者的异同,比如接口只能有抽象方法(直到Java 8之后的变化),而抽象类可以有具体实现,接口的多重继承优势等。 另外,实际应用场景也是用户可能关心的。比如设计模式中使用接口的情况,或者如何用接口实现回调机制。举一些例子会有帮助,比如Runnable接口,或者自定义的回调示例。 还要注意接口的继承关系,接口可以继承多个父接口,这类的单继承不同。默认方法的冲突解决也是一个点,当多个接口有相同默认方法时,实现类如何处理。 用户可能还有一些疑问,比如为什么需要接口,直接使用类继承不行吗?这时候需要解释接口带来的解耦、多态的好处,以及在框架设计中的灵活性。 另外,可能需要提到接口的常量定义,虽然现在不推荐在接口中定义常量,但有些旧代码中存在这种情况,需要说明。 最后,确保给出清晰的代码示例,展示接口的定义、实现,以及默认方法、静态方法的使用。同时,相关问题要覆盖接口的不同方面,比如默认方法、多重继承、与抽象类的区别等。 检查是否有遗漏点,比如接口的访问权限,是否所有方法都是public的,或者默认方法的使用场景,以及私有方法在接口中的作用。确保回答结构清晰,分点详细,示例准确,相关问题有针对性。</think>### `interface` 关键字详解 --- #### **1. 接口的基本概念** - **定义**:接口是Java中的一种引用类型,用于定义**行为规范**(方法签名),类通过实现接口来获得特定行为。 - **特点**: - 接口中的方法默认是 `public abstract` 的(Java 8前)。 - 接口中的变量默认是 `public static final` 的。 - 类通过 `implements` 关键字实现接口。 - 一个类可以实现多个接口,实现多重继承。 **示例:定义一个简单的接口** ```java interface Animal { void sound(); // 抽象方法 } ``` **类实现接口**: ```java class Dog implements Animal { public void sound() { System.out.println("汪汪"); } } ``` --- #### **2. 接口的特性(Java 8+)** 从Java 8开始,接口新增了默认方法静态方法: - **默认方法(Default Method)**:允许在接口中提供方法的默认实现。 ```java interface Animal { default void sleep() { System.out.println("动物休息"); } } ``` 实现类可直接调用或重写该方法。 - **静态方法(Static Method)**:接口可以直接调用静态方法。 ```java interface Animal { static void info() { System.out.println("这是动物接口"); } } ``` 调用方式:`Animal.info();` - **私有方法(Java 9+)**:用于封装默认方法中的公共逻辑。 ```java interface Animal { default void eat() { log("开始进食"); } private void log(String msg) { System.out.println("日志:" + msg); } } ``` --- #### **3. 接口的多重继承** - 一个接口可以继承多个父接口,解决类的多重继承问题。 ```java interface A { void methodA(); } interface B { void methodB(); } interface C extends A, B { void methodC(); } class MyClass implements C { public void methodA() { System.out.println("A"); } public void methodB() { System.out.println("B"); } public void methodC() { System.out.println("C"); } } ``` - **默认方法冲突**:如果多个接口有相同的默认方法,实现类必须显式覆盖该方法。 ```java interface A { default void hello() { System.out.println("A"); } } interface B { default void hello() { System.out.println("B"); } } class MyClass implements A, B { public void hello() { System.out.println("C"); } // 必须重写 } ``` --- #### **4. 接口与抽象类的区别** | **特性** | **接口interface)** | **抽象类(abstract class)** | |----------------|-------------------------------------|-------------------------------------| | 方法实现 | Java 8+支持默认/静态方法 | 可以有具体方法实现 | | 成员变量 | 默认 `public static final` | 可定义普通变量 | | 构造函数 | 无 | 有 | | 多重继承 | 支持(类可实现多个接口) | 不支持(类只能继承一个抽象类) | | 访问权限 | 所有方法必须是 `public` | 方法可以有不同访问权限 | --- #### **5. 接口的实际应用场景** 1. **定义回调函数**:如事件监听器(`ActionListener`)。 2. **实现解耦**:通过接口编程,降低模块间依赖(如Spring框架)。 3. **设计模式**:策略模式、工厂模式等依赖接口实现。 4. **API设计**:对外暴露接口而非具体实现,提高安全性。 **示例:回调接口** ```java interface Callback { void onComplete(String result); } class Task { void execute(Callback callback) { String result = "任务完成"; callback.onComplete(result); } } public class Main { public static void main(String[] args) { new Task().execute(result -> System.out.println(result)); } } ``` --- #### **6. 接口的常见问题** - **Q1:为什么接口不能直接实例化?** 接口是抽象的,没有具体实现,必须通过类实现后创建对象。 - **Q2:接口中的变量为什么必须是 `public static final`?** 接口不保存状态,变量应是常量,供所有实现类共享。 - **Q3:默认方法抽象方法的区别?** 默认方法有实现,实现类可直接使用;抽象方法必须被重写。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值