抽象类和接口
抽象类和接口
抽象类:
-
抽象类只能额外用public修饰,因为类只能用public,public+abstract,public+final,final,abstract五种方法修饰,而抽象类固定必须要用abstract,可用的访问修饰符只有public。
-
抽象类的中不一定全是抽象方法,可以有普通方法和其他类成员(变量,常量,代码块等)。但拥有抽象方法的类一定是抽象类。
-
抽象类中的抽象方法只能用public或protected之一修饰,故只有两种类型,不能用native,final,synchronized,private,static,strictfp(使方法的浮点运算更精确)等修饰。default为默认方法的声明,不是修饰符,也不能对抽象方法进行修饰,加在抽象方法声明中会出现结构性错误。
-
内部抽象类不能添加访问修饰符
接口
-
接口是一种特殊的抽象类
-
传统接口是抽象方法和final常量值定义的集合。Java8之前只包含这两个部分。其中:
-
抽象方法只能是public abstract类型,比抽象类的抽象方法还少一种类型。少一种类型以及前面第3点所说的不能用那些修饰符的原因:
-
常量只能是public static final。
-
-
Java8之后接口允许定义和实现默认方法(default)或静态方法(static修饰),两个方法默认为public类型
两者对比:
- 抽象类同普通类,只能单继承;但一个类包括抽象类可以实现多个接口。接口可以多继承,其接口可以继承其他接口
- 接口中的三种方法类型:默认方法需要接口实现类的实例来调用,静态方法可以直接使用接口调用,抽象方法必须被实现才能使用
- 抽象类的两大方法类型:
- 抽象方法与接口类似,必须被子类实现才能使用
- 其他方法只能被继承的方法调用,调用限制与方法本身的类型有关
- 抽象类不能实例化。
- 抽象类如果可以实例化的话,那么就可以调用类中的抽象方法,很明显调用抽象方法是没有意义的,所以抽象类不能实例化

浙公网安备 33010602011771号