比抽象类更加抽象的是接口,在接口中所有的方法都会被 public
abstract
修饰。
注意:Java 8 之后接口中新增加了 default 默认方法和 对 static 方法的支持。
接口的定义:一般由常量和抽象方法组成
[public] interface 接口名 [extends 父接口名列表 ] {
[public] [static] [final] 域类型 域名 = 常量值 ;
[public] [abstract] 返回值 方法名(参数列表) [throw 异常列表];
}
Java 8在接口中提供了声明默认方法和静态方法的能力。接口示例代码如下:
package xxx.yyy;
public interface IHello {
public static void xxx() {
System.out.println("xxx");
}
public default void yyy() {
System.out.println("yyy");
}
}
注意:在 Java 8 中,静态方法和默认方法都必须是 public 的,Java 9 去除了这个限制,它们都可以是private的,引入 private方法主要是为了方便多个静态或默认方法复用代码。
引入抽象方法和抽象类,是 Java 提供的一种语法工具,对于一些类和方法,引导使用者正确使用它们,减少误用。使用抽象方法而非空方法体,子类就知道它必须要实现该方法,而不可能忽略,若忽略Java编译器会提示错误。使用抽象类,类的使用者创建对象的时候,就知道必须要使用某个具体子类,而不可能误用不完整的父类。
在Java中抽象类和抽象方法的修饰符是 abstract
,注意抽象方法中只有方法的声明,没有方法的实现。
abstract class 类名称 {
member var;
method(){…} // 一般方法
abstract method(); // 抽象方法, 抽象方法在后直接跟分号
}
普通类加上 abstract 关键字就变成了抽象类。一但类中包含有抽象方法的类必须定义为抽象类或者接口,否则编译时会提示 The type XXX must be an abstract class to define abstract methods
Q: 抽象关键字 abstract 不可以和哪些关键字共存?
A: private
私有内容子类继承不到,所以,不能重写. 但是,abstract修饰的方法,要求被重写。两者冲突。
final
final 修饰的方法不能被重写。而 abstract 修饰的方法,要求被重写。两者冲突。
static
假如一个抽象方法能通过 static 修饰,那么这个方法,就可以直接通过类名调用。而抽象方法是没有方法体的,这样的调用无意义。所以,不能用 static 修饰。
抽象类和接口是配合而非替代关系,它们经常一起使用,接口声明能力,抽象类提供默认实现,实现全部或部分方法,一个接口经常有一个对应的抽象类。比如,在 Java 类库中,有: ❑ Collection 接口和对应的 AbstractCollection 抽象类。 ❑ List 接口和对应的 AbstractList 抽象类。 ❑ Map 接口和对应的 AbstractMap 抽象类。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有