抽象类
当一个类中含有至少一个抽象方法时,这个类就是抽象类。(这里我们忽略那种没有抽象方法却声明为抽象类的情况)
首先讲一下抽象方法,抽象方法是一种特殊的方法,它只有声明,没有具体实现。编写规范如下所示:
abstract void play();
抽象方法必须用abstract关键字来定义,当一个类含有抽象方法时,该类为抽象类,且 必须有abstract关键词去修饰。抽象类含有没有具体实现的方法,无法实例化对象。编写规范如下所示:
[public] abstract class test {
abstract void play();
}
抽象类中不仅可以拥有抽象方法,也可以含有成员变量和具体的成员方法。
- 注:abstract关键字不可与static或者final连用
抽象类与普通类的区别
- 抽象方法访问修饰符必须是public(默认)或者protected,且不能使用final去修饰,因为抽象类需要被继承并重写抽象方法。
- 抽象类由于含有为实现的方法,故无法用来创建对象。
- 一个类若继承了一个抽象类,该类必须实现抽象类的所有抽象方法,除非该类也为抽象类。
接口
接口英文名称为interface,泛指供他人调用的方法或者函数。Java中接口的编写规范如下:
[public] interface UserDao(){
}
接口中可以含有变量和方法,但是变量会被隐式的指为public static final,而所有方法会都会被隐式的指为public abstract,从这里可以看出,接口比抽象类更加的抽象。
接口更多的起到了一种规范的作用,Java中类只能单继承,但是可以实现多接口,编写规范如下:
public class UserDaoImpl implements UserDao,Interface1,Interface2,[...]{
}
除抽象类外,实现接口就必须实现接口内的所有方法。
抽象类与接口的区别
- 抽象类可以提供非抽象的普通成员方法,而接口中只能存在public abstract 方法(JAVA8新特性中支持接口实现默认方法,需要用default关键字标识);
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final;
- 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
网友评论