1. 抽象类
抽象:笼统、模糊、看不懂、不具体
例:
//抽象类
abstract class TestAbstract {
//这是一个抽象方法,
public abstract void test1();
//当然这里面也可以是普通的方法
public void test2() {
System.out.println("我是一个在抽象类里面的普通方法");
}
}
特点:
1. 方法只有声明没有实现就是抽象方法,必须在抽象类中,该类也必须被abstract修饰。
2. 抽象类不能被实例化(实例化无意义)
3. 抽象类必须有子类对其覆盖,子类才可以实例化(前提实现全部的抽象方法),否则还是抽象类,因此抽象类一定是一个父类。
4. 抽象方法不能和final(不能被更改)、private(私有方法无法被调用)、static(无方法体 调用无效)一起使用。
5. 抽象类中方法如果全部是抽象的,那么该类就是一个纯抽象类,即接口。
6. 抽象类可以有一般的变量和方法,变量可以是任意的,抽象方法必须是public或者protected,default,否则不能被子类继承,定义为private类型,和没写一样。
抽象类和一般类的区别
1. 一般类有足够的信息描述事物
抽象类描述事物的信息可能不足
2. 一般类不能定义抽象方法
抽象类既可以有抽象方法,也可以调用非抽象方法
3. 一般类可以被实例化
抽象类不可以被实例化
4 抽象类和一般类的区别,不能是u梨花
2. 接口
当一个类里面的方法全部是抽象方法的时候,我们就可以称之为接口 关键字使用interface表示
例:
public interface CategoryMapper {
List<Category> getAllCategory();
void add_category(String c_name);
void remove_category(Integer c_id);
Category getCategoryById(Integer c_id);
void update_category(Category category);
}//类中的方法全部都是抽象的
特点:
1. 接口可以有成员变量,但是会被隐式地指定为public static final ,也只能是public static final
接口的所有的方法都是抽象方法,都会被隐式地指定为public abstract
2. 实现接口的类必须实现接口所定义的全部的方法
3. 接口中的字段只是被存储在该接口的静态存储区域内,并不属于该接口。
优点:
1. 接口是对外暴露的规则
2. 程序的功能的扩展
3. 接口的可以降低耦合性
4. 接口可以进行多实现
3 抽象类和接口的区别
1. 成员变量
抽象类中可以有成员变量,也可以有常量
接口中只能有常量,默认修饰符public static final
2 成员方法
抽象类中可以有抽象方法,也可以有非抽象方法和静态方法
接口中只能有抽象方法,默认修饰符public abstract
3 构造方法
抽象类中可以有构造方法和静态代码块
接口中没有构造方法
4 默认权限
抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default
接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的
JDK 1.9时,接口中的方法可以是private的
默认是public类型
5 抽象类需要被继承,而且只能单继承
接口需要被实现,而且可以多实现
6 对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更
对于接口,如果接口进行了变更,则所有实现了这个接口的类都必须进行相应的变动。
7 抽象类既可以继承普通的类,也可以继承接口的类和抽象类
接口只能继承接口的类