interface(接口)是抽象方法和常量值定义的集合:
①JDK7及以前:只能定义全局常量和抽象方法
- 全局常量:默认是由public static final修饰的,且必须给其初值;实现类中不能重新定义,不能改变其值。
- 抽象方法:默认是由public abstract修饰的。
② JDK8增加
- 静态方法:使用 static 关键字修饰。只能通过接口直接调用静态方法;
- 默认方法:默认方法使用 default 关键字修饰。可以通过实现类对象来调用,可以被实现类重写。
③ 注意事项
- 接口与接口之间可以继承,而且可以多继承;
- 接口不可以实例化,如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化;
- 如果实现类没有覆盖接口中所有的抽象方法,则此实现类应该定义为一个抽象类;
- 实现类的方法中调用接口中的默认方法; 格式: 接口名 . super . 默认方法名();
- 如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么该实现类必须重写该默认方法,否则报错-->接口冲突。
- 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,子类没有重写时,默认调用的是父类中的同名同参数的方法。
- instanceof 运算符可以用来决定某对象的类是否实现了某个接口;
abstract关键字来修饰一个类,这个类叫做抽象类
Java允许类设计者指定:超类声明一个方法但不提供实现,该方法的实现由子类提供。这样的方法称为抽象方法。有一个或更多抽象方法的类称为抽象类。
①注意事项
- 抽象方法:只有方法的声明,没有方法的实现。以分号结束;
比如:public abstract void test();(含有抽象方法的类必须被声明为抽象类) - 抽象类不能被实例化。但是可以有构造方法;
- 抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,子类仍为抽象类。
- 不能用abstract修饰变量、代码块、构造器;
- 不能用abstract修饰私有方法、静态方法、final的方法、final的类。
- 抽象类可以实现(implements)接口 ,抽象类可继承具体类也可以继承抽象类;