一.抽象
抽象类不可以创建对象(但是有构造方法)
抽象方法一定是个成员方法
1.abstract修饰符
修饰的类是抽象类
修饰的成员方法是抽象方法,没有方法体
2.抽象类
**定义:**被abstract修饰的类就是抽象类
特点:
抽象类不能被实例化,只能被继承
一般抽象类中,有功能定义,但是没有功能的实现,必须让子类实现
抽象类也可以继承抽象类
如果一个非抽象类继承一个抽象类,必须实现所有的抽象方法
但是一个抽象类继承一个抽象类的话,可以实现0~N个抽象方法
**目的:**把控制权放在父类上(控制反转)
注意:
含有抽象方法的类必须是抽象类,但是抽象类中不一定有抽象方法,比如要使一个类不能实例化对象
final和abstract不可以同时出现,因为final修饰的成员方法不能被覆写,而抽象方法就是用来被继承的的
二.接口
1.语法:
[修饰符] interface 接口名{}
2.注意事项
1.对于接口中的常量,public static final可以省略
2.对于接口中的抽象方法 public abstract可以省略,默认就是public abstract
3.一个类可以实现多个接口
4.接口和接口之间可以多继承
例如:
interface A extends B,C,D{
}
interface B{}
interface C{}
interface D{}
5.一个抽象类实现一个接口需要实现0~N个方法
6.一个普通类实现一个接口需要实现他所有的方法和这个接口所继承的接口中的方法
2.优点:
面向接口编程,当一个功能拥有多种实现的时候,就需要依赖接口编程,此时可以降低耦合度.
解决了java单继承的缺陷
2.接口在1.8之后的新特性
支持静态方法和默认方法(真正实现了多继承)
interface C1 {
// 静态方法
public static void m1(){
System.out.println("静态m1方法");
}
// 默认方法,就等于普通类中的成员方法
/*
注意:这里的default不是访问控制权限符,仅仅是一个修饰符,修饰接口中的默认方法
*/
public default void m2(){
System.out.println("默认方法");
}
// 抽象方法,等于没有方法体的成员方法
public void m3();
}
1.9开始,支持private方法