抽象类
public abstract class Student
- 抽象类的所有方法都必须由继承它的子类实现,除非子类也是抽象类
- 抽象类中一定有构造器,便于子类实例化
- 类是单继承,接口可以多继承
- 不能new,只能靠子类实现(不可实例化),是一种约束
- 只要有抽象方法,这个类就必须是抽象类,但是抽象类中也可以有非抽象的方法,反之抽象类中可以没有抽象方法
- 抽象方法只有方法的声明没有方法体
- 注意:abstract不能用来修饰私有方法、静态方法、final方法、final类(只要不能被继承的都不能修饰)
16、接口Interface
- 只有规范,自己无法写方法,只能用于约束
- 实现约束和实现分离(面向接口分离),在实现类中实现
public interface User{}
- 类是单继承,接口可以多继承
- 接口与接口之间可以继承,而且可以多继承
- JDK7接口中的所有方法定义都默认是抽象的public abstract,定义的时候可以省去修饰符
- JDK7接口中的所有属性都默认是抽象的public static final全局静态常量,定义的时候可以省去修饰符
- JDK8除了可以定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
- 实现接口的类需要实现接口中的所有方法,否则不能实例化
public class UserIm implements User{}
alt + enter 或 alt + insert
- 接口不能定义构造器!意味着接口不能实例化
- 使用Implement实现
作用
- 一种约束
- 定义一些方法,让不同的人实现
- public abstract方法
- public static final
- 接口不能被实例化,接口中没有构造方法
- Imple可以实现多个接口
- 必须要重写接口中的所有方法
JDK8中接口的新特性
- JDK8除了可以定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
- 接口中定义的静态方法只能通过接口来调用
- 通过实现类的对象,可以调用接口中的默认方法。如果实现类重写了接口中的默认方法,调用时仍然调用的是重写以后的方法
- 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法(类优先原则)
- 如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下报错—> 接口冲突 这就需要我们必须在实现类中重写此方法
17、抽象类和接口的区别
- 抽象类可以定义抽象方法和普通方法,接口只能定义抽象方法
- 抽象类只能被实现类单继承,但是一个实现类可以同时实现多个接口