抽象
- 包含抽象方法的类叫做抽象类,一个类中有一个或多个抽象方法,则这个类必须被指定为抽象类
- 抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理
- 子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);
- 抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
- 构造方法,类方法(用static修饰的方法)不能声明为抽象方法
- 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
接口
接口就是一个完全的抽象类,接口里面只有抽方法。
接口可以多实现,且接口中的方法必须为public,否则只能得道默认的包访问权限
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
接口与类相似点
一个接口可以有多个方法。
接口文件保存在 .java 结尾的文件中,文件名使用接口名。
接口的字节码文件保存在 .class 结尾的文件中。
接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。