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 抽象类既可以继承普通的类,也可以继承接口的类和抽象类

                接口只能继承接口的类