java基础-抽象类和接口区别

一、抽象类

定义:

抽象类就是包含抽象方法的类。(在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题吧,因为如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为什么。)但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。抽象类的定义形式如下:

[public] abstract class ClassName {
    abstract void fun();
}

抽象类有以下特点:
1) 抽象类类名前要有abstract修饰
2) 因为抽象类中含有无具体实现的方法,所以抽象类不能创建对象
3) 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

抽象方法:

在了解抽象类之前先了解一下抽象方法。抽象方法是一种只有声明,没有实现的方法。抽象方法必须 用abstract关键字修饰。抽象方法的格式如下:

abstract void fun();

抽象方法有以下特点:

 1) 抽象方法要有abstract修饰
 2) 抽象方法没有具体实现
 3) 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

二、接口

接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。定一个接口的形式如下:

[public] interface InterfaceName {
 
}

三、抽象类和接口的相似性和区别

相似性:

 1. 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
 2. 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

区别:

1. 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
3. 接口中不能含有静态代码块以及静态方法(jdk1.8中接口里可以有静态方法,接口里的静态方法 必须要有body。),而抽象类可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5. 接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
6. 抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法。
7. 抽象类的方法可以被public,protected等修饰符修饰,接口中的方法全都是public abstract的方法,如果省略修饰符,则默认的也都是public abstract修饰。

四、总结

如果你想拥有一些方法,并且这些方法有默认实现,那么久使用抽象类
如果你想实现多继承,那么就是用接口吧,java不支持多继承,但是可以实现多个接口。

猜你喜欢

转载自blog.csdn.net/weixin_42782897/article/details/88400904