Java中的抽象类和接口

什么是抽象类?

  • 抽象类的定义
    抽象指的是被abstract修饰的类(abstract关键字要放在访问修饰词背后,class前),抽象类中允许具有抽象方法
public abstract class Main
  • 抽象方法
    抽象指的是被abstract修饰的方法(abstract关键字要放在访问修饰词背后,返回值前)。其中抽象方法没有具体的实现,因此所对应的类也不允许实例化,抽象类对类成员不做要求。继承了抽象类的非抽象类,必须重写抽象类的所有抽象方法。
public  abstract  void func();
  • 抽象类的意义
    抽象类的作用很明显,就是专门用来继承的类。但是也许有人会觉得定义抽象类多此一举,因为只要子类设计者记得重写需要重写方法即可,不需要专门用关键词来修饰一个方法。
    但定义抽象类是有意义的,为了编译器的检查机制。编译器会提醒类设计者继承的是一个抽象类,以防止类的调用者不重写本该重写的方法所带来的困扰。其实很多语法都是为了多一层编译器的检查,例如重写方法时的注解。

什么是接口?

  • 接口的定义
    接口指的是在类外定义的,具有interface关键字的代码块,特点是接口和其成员有默认的修饰词
    其中,接口默认是abstract修饰,interface允许用abstract修饰,但这个abstract无实际作用。
    接口中的字段默认被public static final修饰,因为被final修饰,所以必须赋予初值,否则直接报错。
    接口中的方法默认是public abstract修饰,但也有特例。由于静态方法和对象无关,继承之后也无需重写,所以允许在接口中定义静态方法,但由于其不能被重写,接口中的静态方法必须具有具体的实现。此外还有被default修饰的方法也可以有具体实现,但这里不多提及。
interface a {
    int b = 10;
    void func();
    static void func2() {
        
    }
    default void func3() {
        
    }
}
  • 接口的意义
    接口最大的作用是近似实现多继承。Java是只有单继承结构,一个类只能有一个父类。但如果想要实现类似多继承的效果,就可以使用接口,一个类允许实现多个接口。使用implement关键字即可,可以用逗号隔开要实现的接口。
public abstract class Main extend ClassA implements IA,IB

抽象类和接口的区别和联系是什么?

  • 抽象类和接口的联系:都有abstract关键字(其中接口是默认修饰,而抽象类是显式修饰的),都不能实例化,都是用来被继承的。

  • 抽象类的接口的区别:
    1成员的区别:抽象类对成员不做限制,而接口中的字段默认public static final,方法默认pubic abstract;
    2继承结构的区别:抽象类只能使用单继承,而接口允许多继承。
    3语法上的区别:例如抽象类定义用class而接口用interface,继承抽象类用extends而实现接口用implement等。

其中1和2为主要的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值