Java抽象类与接口

抽象类介绍

  1. 用abstract关键字来修饰一个类时,这个类就叫抽象类
    访问修饰符abstract类名{
    }
  2. 用abstract关键字来修饰一个方法时,这个方法就是抽象方法
    访问修饰符 abstract 返回类型方法名(参数列表);//没有方法体
  3. 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()
  4. 抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多

注意事项:

  1. 抽象类不能被实例化
  2. 抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法。还可以有实现的方法
  3. 一旦类包含了abstract方法,则这个类必须声明为abstract
    抽象类不一定含有抽象方法;有抽象方法一定是抽象类
  4. abstract只能修饰类和方法,不能修饰属性和其它的
  5. 抽象类可以有任意成员【抽象类还是类】,比如:非抽象方法、构造器、静态属性等等
  6. 抽象方法不能有主体,即不能实现(只能重写)
  7. 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法(有个方法体{}),除非它自己也声明为abstract类
  8. 抽象方法不能使用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 ...");
}
}

注意事项:

  1. 接口不能被实例化
  2. 接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
    void aaa()
    实际上为abstract void aa()
  3. 一个普通类实现接口,就必须将该接口的所有方法都实现。
  4. 抽象类实现接口,可以不用实现接口的方法。
abstract class a implements A{

}
  1. 一个类同时可以实现多个接口
  2. 接口中的属性,只能是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{}
  1. 接口中属性的访问形式:接口名.属性名
  2. 接口不能继承其它的类,但是可以继承多个别的接
    interface A extends B,C{}//B,C为其他接口
  3. 接口的修饰符只能是public和默认,这点和类的修饰符是一样的.
posted @   zzzzzzzk  阅读(27)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示