【转】extends interface

【转】http://aoyi.iteye.com/blog/360376

一个imp class可以同时实现多个interface,格式如下:

class Impl implements Intf1,  Intf2, ..., IntfN; 

 

如果一个class又有继承又有实现,那么应该先extends再implements,如:

class ImplExt extends Base implements Intf;

 

Java中不支持class的多重继承,但interface可以,如:

class Ext extends Base1, Base2, ..., BaseN; //syntax error
interface ExtIntf extends BaseIntf1, BaseIntf2, ..., BaseIntfN; //OK

 

<think>我们被要求解释Java中的关键字abstract、extendsinterface、implements的含义和用法。根据用户提供的引用材料,我们可以总结如下: 1. **abstract**:用于声明抽象类或抽象方法。 - 抽象类:用`abstract`修饰的类,不能实例化,只能被继承(extends)。抽象类可以包含抽象方法和非抽象方法(有实现的方法)。 - 抽象方法:用`abstract`修饰的方法,只有声明,没有方法体(即没有实现)。抽象方法必须存在于抽象类中(或接口中,但接口中的方法默认是抽象的,不需要用`abstract`关键字显式声明)。 2. **interface**:用于定义接口。接口是一种完全抽象的类,它只能包含抽象方法(在Java 8之前)和常量(static final字段)。从Java 8开始,接口还可以包含静态方法和默认方法(用`default`修饰,有实现的方法)。接口中的方法默认是`public abstract`的(可以省略不写),字段默认是`public static final`的。 3. **extends**:用于类的继承和接口的继承。 - 类继承:一个类(普通类或抽象类)可以继承另一个类(普通类或抽象类),使用`extends`关键字。Java不支持多重继承(即一个类只能直接继承一个父类)。 - 接口继承:一个接口可以继承另一个或多个接口(使用`extends`,可以多继承),但不能继承类。 4. **implements**:用于类实现接口。一个类(普通类或抽象类)可以实现一个或多个接口,使用`implements`关键字,多个接口之间用逗号分隔。实现接口的类必须提供接口中所有抽象方法的具体实现(除非这个类本身是抽象类,则可以不实现,但最终必须有子类实现)。 根据引用材料,我们还可以得到一些关键点: - 一个类可以同时继承一个类(使用`extends`)并实现多个接口(使用`implements`),格式如:`class SubClass extends SuperClass implements Interface1, Interface2, ...` - 接口可以继承多个接口:`interface SubInterface extends Interface1, Interface2, ...` - 抽象类可以实现接口(使用`implements`),但接口不能实现另一个接口(因为实现意味着提供方法体,而接口中不能有实现,除非是默认方法,但实现接口是类的事情)。引用[1]提到:一个接口可以extends另一个接口,但不能implements另一个接口。而一个抽象类可以implements一个接口,但不能extends一个接口(因为extends用于类继承或接口继承,而接口继承用extends,类继承也用extends,但类不能继承接口,只能实现接口)。 下面我们用代码示例来具体说明:</think>### Java关键字详解:`abstract`、`extends`、`interface`、`implements` --- #### 1. **`abstract`(抽象)** **含义**: 声明抽象类或抽象方法,表示未完成的模板,**不能直接实例化**。 **用法**: ```java // 抽象类(可包含抽象方法和具体方法) abstract class Animal { // 抽象方法(无实现) abstract void makeSound(); // 具体方法 void sleep() { System.out.println("Sleeping..."); } } // 子类必须实现所有抽象方法 class Dog extends Animal { @Override void makeSound() { System.out.println("Bark!"); } } ``` **特点**: - 抽象类可以有构造方法(供子类调用) - 可包含字段、具体方法和抽象方法 - 抽象方法必须被子类实现(除非子类也是抽象类)[^1] --- #### 2. **`interface`(接口)** **含义**: 定义纯行为规范,所有方法默认`public abstract`,所有字段默认`public static final`。 **用法**: ```java interface Swimmable { void swim(); // 隐式抽象方法(无需写abstract) // Java 8+ 默认方法(有实现) default void floatOnWater() { System.out.println("Floating..."); } } ``` **特点**: - 方法无方法体(Java 8前) - 支持多继承(一个类可实现多个接口) - 不能实例化[^1][^2] --- #### 3. **`extends`(继承)** **含义**: 类继承父类,或接口继承其他接口。 **用法**: ```java // 类继承(单继承) class Bird extends Animal { /* 继承Animal的属性和方法 */ } // 接口继承(多继承) interface Flying extends Swimmable, Runnable { void fly(); } ``` **规则**: - 类只能`extends`**一个**父类 - 接口可`extends`**多个**父接口 - 子类继承父类非私有成员[^2][^3] --- #### 4. **`implements`(实现)** **含义**: 类实现接口的规范,必须重写所有抽象方法。 **用法**: ```java class Duck extends Bird implements Swimmable, Flying { @Override public void swim() { /* 实现Swimmable */ } @Override public void fly() { /* 实现Flying */ } } ``` **规则**: - 类可实现**多个**接口 - 必须实现接口所有抽象方法(除非是抽象类) - 实现方法必须是`public`[^1][^3] --- ### 关键区别总结 | 特性 | 抽象类 (`abstract class`) | 接口 (`interface`) | |---------------------|----------------------------------|----------------------------------| | **继承关键字** | `extends`(单继承) | `implements`(多实现) | | **方法实现** | 可包含具体方法和抽象方法 | Java 8前只能有抽象方法 | | **字段** | 普通字段 | 只能是常量 (`public static final`) | | **构造方法** | 有 | 无 | | **多继承** | 不支持 | 支持(接口可多继承) | > ✅ **组合示例**: > `class SubClass extends SuperClass implements InterfaceA, InterfaceB` --- ### 典型应用场景 1. **抽象类** 适合有部分共同实现的类族(如`Animal`作为基类,`Dog`/`Cat`继承) 2. **接口** 定义跨继承树的能力(如`Swimmable`可被`Duck`/`Fish`不同类实现) 3. **接口继承** 扩展功能(如`Flying extends Swimmable`表示飞行物体也能游泳) --- ### 常见误区 ```java // 错误!接口不能实现另一个接口 interface A implements B {} // ❌ // 正确!接口继承用extends interface A extends B, C {} // ✅ // 错误!抽象类不能extends接口 abstract class A extends B {} // ❌(B是接口) // 正确!抽象类实现接口 abstract class A implements B {} // ✅ ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值