什么是抽象类?
一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类我们称为抽象类,并用abstract关键字来修饰。而用abstract关键字修饰的方法,我们称为抽象方法。
关于抽象类
- 抽象方法只有方法的声明,没有方法的实现。以分号结束。比如:public abstract void talk();
- 含有抽象方法的类必须被声明为抽象类,抽象类也可以不含抽象方法;
- 抽象类不能被实例化,只能被继承。继承抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,那么子类也必须定义为抽象类;
- 抽象类的构造方法定义为protected,因为它只能被子类使用。
注意
- 不能用abstract修饰变量、代码块、构造器;
- 不能用abstract修饰私有方法、静态方法、final的方法、final的类。
什么是接口
接口是一种与类相似的结构,用于为对象定义共同的操作。接口就是规范,定义的是一组规则,目的是指明相关或不相关类的对象的共同行为。接口用interface关键字修饰,用implements关键字让对象所属类实现接口。
关于接口
- 接口中所有的数据域都是public static final,所有的方法都是public abstract,并且允许省略;
- 接口中没有构造器;
- 接口采用多继承机制,一个类可以实现多个接口,接口也可以继承其他接口;
- 接口和类是并列关系,或者可以理解为一种特殊的类。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含了常量和方法的定义,而没有变量和方法的实现。
抽象类和接口的区别
相同点:
- 都不能被实例化;
- 接口的实现类或抽象方法的子类只有实现了接口或抽象类中的方法才能实例化。
不同点
- 接口只有定义,没有方法实现。抽象类可以有定义和实现,方法可在抽象类中实现;
- 一个类可以实现多个接口,但只能继承一个类;
- 接口强调特定功能的实现,抽象类强调所属关系;
- 接口只能定义静态常量,不能定义普通成员变量。抽象内中既可以定义普通成员变量又可以定义静态常量。
欢迎指正