接口(接口与抽象类的区别)
一、接口定义
接口可以理解为更彻底的抽象类,接口中的组成以抽象方法和全局常量为主(JDK1.8后也可以包含普通方法和静态方法)。定义如下:
interface ITest {
public static final String MSG = "1111";
public abstract String getMsg();
}
public class Demo {
public static void main(String[] args) {
}
}
(接口名前加上“I”,方便识别这是一个接口)
二、接口使用
- 接口需要被子类实现(implements),且一个子类可以实现多个接口;
- 子类(如果不是抽象类)要覆写接口中全部抽象方法;
- 接口对象需要子类对象向上转型进行实例化。
另外,接口主要用于描述一个公共的标准,所以接口的抽象方法都要用public修饰,且即使不写public,在接口中的抽象方法也默认是public的。子类覆写时,因为要求不低于父类的权限,也只能是public修饰。
三、接口与抽象类的区别
抽象类 | 接口 | ||
1 | 定义关键字 | abstract | interface |
2 | 组成 | 构造、普通方法、静态方法、全局常量、普通成员、static方法 | 抽象方法、全局常量、普通方法、static方法 |
3 | 权限 | 所有权限定义 | 只能是public |
4 | 子类使用 | extends继承一个 | implements实现多个 |
5 | 两者关系 | 可以实现若干接口 | 不允许继承抽象类,可继承多个接口 |
6 | 使用 | 1.都要定义子类 2.子类都要覆写全部抽象接口 3.实例化都是通过子类向上转型实现 |
1)类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
2)抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声名必须用public来修饰没有具体实现的方法。
3)抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static fainl)。
4)这一点也是最重要的一点本质的一点"抽象类是对象的抽象,然接口是一种行为规范"。
5)抽象类的成员的修饰符没有要求,和普通类一致(除抽象方法)。接口中的成员变量的修饰符一定是public static final,方法都是public abstract。
6)接口是可以多继承的。
7)抽象类不能产生对象的,但可以由它的实现类来声明对象。 在实现接口时,我们也常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰。