Java抽象类与接口
抽象类介绍
- 用abstract关键字来修饰一个类时,这个类就叫抽象类
访问修饰符abstract类名{
} - 用abstract关键字来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型方法名(参数列表);//没有方法体 - 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()
- 抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多
注意事项:
- 抽象类不能被实例化
- 抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法。还可以有实现的方法
- 一旦类包含了abstract方法,则这个类必须声明为abstract
抽象类不一定含有抽象方法;有抽象方法一定是抽象类 - abstract只能修饰类和方法,不能修饰属性和其它的
- 抽象类可以有任意成员【抽象类还是类】,比如:非抽象方法、构造器、静态属性等等
- 抽象方法不能有主体,即不能实现(只能重写)
- 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法(有个方法体{}),除非它自己也声明为abstract类。
- 抽象方法不能使用private、final和 static来修饰,因为这些关键字都是和重写相违背的。(抽象的后续就是抽象方法会被重写)。
private:用private修饰,没办法被子类看到重写
final:因为抽象类一定要被abstract修饰,而且抽象类一定要被继承否则该抽象类无意义。而被final修饰的类不能被继承,也就是说不能有子类,所以二者冲突不能同时使用。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。众所周知,抽象方法是没有方法体的,可见运行也就没意义了。虽然外部抽象类不能用Static修饰,但内部的抽象类却可以使用static声明
接口
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
语法:
interface 接口名{
//属性
//方法
}
class 类名 implements 接口名{
自己属性;
自己方法;
必须实现接口的抽象方法
}
在jdk8后,可以有默认实现方法,需要使用default关键字修饰default
在jdk8后,可以有静态方法
public interface Ainterfac{
public void ok() {
System.out.println("ok ...");
}
public static void cry(){
System.out.println("cry ...");
}
}
注意事项:
- 接口不能被实例化
- 接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
void aaa()
实际上为abstract void aa()
- 一个普通类实现接口,就必须将该接口的所有方法都实现。
- 抽象类实现接口,可以不用实现接口的方法。
abstract class a implements A{
}
- 一个类同时可以实现多个接口
- 接口中的属性,只能是final的,而且是 public static final修饰符
inertface IB{
int n1=10; //等价 public static final int n1=10;
//可以直接通过接口名字访问(static),且无法修改(final)
}
interface IC{
}
class Pig implements IB,IC{//同时实现两个接口,但是所有方法都要事先
}
interface ID extends IB,IC{}
- 接口中属性的访问形式:接口名.属性名
- 接口不能继承其它的类,但是可以继承多个别的接
interface A extends B,C{}//B,C为其他接口
- 接口的修饰符只能是public和默认,这点和类的修饰符是一样的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~