抽象类:Abstract关键字,就是拿来装抽象方法的
所以,抽象方法一定在抽象类里,但是抽象类里不一定有抽象方法
=================================================================
接口:interface关键字,也是拿来装抽象方法的
public interface IUsb3_0 {
/**全局常量;默认都会有一个public static final修饰成员变量*/
int MAX_VAULE=1;
/**
* 只有在接口里能这样写,方法前面有默认public abstract
* 这是抽象方法
*/
void power();
void dataTransfer();
/**
* jdk1.7之后,提供默认和静态方法,增强扩展性
*/
public default void testDefault() {
System.out.println("testDefault");
}
public static void testStatic() {
System.out.println("testStatic");
}
}
注意事项
1. 如果接口中只有一个抽象方法,该接口就是函数式接口,函数式接口可以用@FunctionalInterface注解修饰
2. 函数式接口可以使用jdk8新特性lambda表达式
IAli i =new IAli() {
@Override
public void aliPay() {
System.out.println("匿名内部类");
}
};
i.aliPay();
//lamda表达式就是简化函数式接口的匿名内部类
IAli i2 =() ->System.out.println("lamda表达式");
i2.aliPay();
=================================================================
二者对比:
1、接口没有构造方法,抽象类有,但是二者都不能new对象
2、抽象类的命名规则:类的名前面加上Abstract
接口命名规则:IXxx 接口实现类命名规则:接口名Impl
3、实现接口:implements关键字、继承类:extends关键字
4、单继承、多实现
5、类和类:单继承 类和接口:多实现 接口和接口:多继承
二者使用:抽象类写常规功能、接口写特别功能