只是小白的学习笔记,有错轻喷🥬
目录
区别
-
抽象类
💡 抽象类:包括抽象方法的类(抽象方法——只有声明没有具体的实现)
抽象方法的声明格式
abstract void fun();
抽象方法要用abstract
进行修饰,抽象类也须要在类前使用abstract
进行修饰
抽象类的定义
public abstract class ClassName{
abstract void fun();
}
-
和普通类的区别
- 不能使用
new
操作符创建实例,也不能用new
初始化 - 包含抽象方法的类必须声明为抽象类,抽象方法不能包含在非抽象类中
(感觉这两句话是一个意思) - 抽象方法一般为public(如果为private,则不能被子类继承,子类无法实现该方法
- 不能使用
-
接口
💡 接口:与类相似的结构,用于对对象定义共同的操作,在软工工程中,泛指供调用的方法或者函数(每个接口都被编译为独立的字节码文件)
接口的定义形式
public interface InterfaceName{
}
-
和普通类的区别
- 由于接口中所有数据域都是
public static final
而且所有的方法都是public abstract
,所以允许忽略省略修饰符(只是在接口方法中可以省略public,子类的方法还是要public的)public interface T{ public static fianl int K=1; public abstract void p(); } //等价于 public interface T{ int K=1; void p(); }
- 不能使用
new
创建接口实例,让对象所属类实现接口需要使用implements
(一个类可以继承多个借口,所以implements后面可以接多个接口名)
class ClassName implements Interface1,Interface2,[...]{
}
同样,利用extends,接口可以继承其他接口,这样的接口被称为子接口。
public interface NewInterface extends Interface1,...,InterfaceN{
}
此时NewInterface是Interface1,...,InterfaceN的子接口。
-
抽象类和接口的区别
- 抽象类可以提供方法的实现细节,而接口中的方法只能是
public abstract
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是
public static final
类型的。 - 接口中不能含有静态代码块以及静态方法(用
static
修饰的方法),而抽象类是可以有静态代码块和静态方法。 - 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
- 抽象类可以提供方法的实现细节,而接口中的方法只能是
-
抽象类和接口的相同点
- 都不能实例化,即不能使用
new
操作符创建实例 - 都可以被继承,都包含类抽象方法,都可以实现程序的多态性
- 都不能实例化,即不能使用
-
总结
接口和抽象类都可以用于对对象指定共同的行为,比较强的is-a(是一种)关系采用类来建模,而弱的is-a(是一类)关系可以使用接口建模。接口比抽象更加灵活,因为一个子类只能继承一个父类,但是却可以实现任意个数的接口
或者可以看看这篇