1、抽象方法:
1-1、由关键字abstract修饰
1-2、只有方法定义,没有方法实现(没有方法体)
public abstract void fn();
2、抽象类:
2-1、 由关键字abstract修饰,不能实例化(不能new对象);
2-2、 成员变量可以是普通成员变量、常量、静态变量,但不能用abstract修饰;
2-3、 抽象类不一定由抽象方法,但有抽象方法类一定是抽象类;
2-4、可以定义构造方法,用于子类访问父类构造;
2-5、抽象类需要被继承,子类必须重写抽象类中的所有抽象方法,子类也可以是抽象类(但是没啥意义);
3、接口:
3-1、关键字interface;
3-2、不能实例化(new对象);
3-3、只能定义常量和抽象方法
1)常量:
public static final (也可以省略不写)但必须赋初值;
2)抽象方法:
修饰词必须是public,而且public abstract可以省略;
3-4、接口需要被实现,而且必须重写接口中的所有抽象方法(JDK1.8会多一些东西);
3-5、接口与接口之间可以继承,而且可以继承多个(逗号隔开)
4、区别
成员变量:
抽象类 | 接口 |
---|---|
普通、静态、常量 | 只能定义常量(必须赋予初值) |
构造方法:
抽象类 | 接口 |
---|---|
可以有 | 这个真没有 |
关系区别:
- 类与类:继承,单一继承,一个类只能继承一个抽象类
- 类与接口:实现,多实现(一个类可以实现多个接口,接口之间用逗号连接)
- 接口与接口:继承,多继承
成员方法:
抽象类 | 接口 |
---|---|
普通、抽象 | 抽象方法、静态方法(JDK1.8),由default修饰的默认方法(JDK1.8) |
default和static两种方法可以在接口内实现
而且,default默认方法是可以选择继承或者不继承的、静态方法只能被public修饰或者不写
这里是接口:
df是默认方法
aa是普通抽象方法
st是静态方法
public interface interfaceTest {
default void df(){
System.out.println("default");
st();
}
public abstract void aa();
static void st(){
System.out.println("static");
}
}
从图中可以看出是可选择的;
既然有了这两个新东西当然也有他们的用法:
不全,还在接触中