抽象类就是将相似或类似的部分给抽取出来,这句话看上去很搞笑,其实它说出了抽象类的真理。你可能会说”我不是能够重写一个公共类,而后我实例化这个公共类,调用相同的方法就能够了”,这里是能够,实际上抽象类的工做也就是这个,不过他省去了你实例化的这个步骤,而且你还能够生载这个方法 spa
抽象类特性: 继承
1. 非抽象子类必须彻底实现这个抽象中全部的抽象方法 接口
2. 抽象类不能被实例化,它的意义在于被扩展。访问方式TestClass::test(‘我是抽象方法’); test
3. 抽象类一般(也能够没有)至少有1个抽象方法,抽象方法中没有大括号。非抽象方法是有的 变量
4. 抽象方法没必要实现具体的功能,由子类来完成 扩展
5. 在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义 方法
6. 抽象类的方法能够有参数,也能够为空 im
7.若是抽象方法有参数,那么子类的实现也必须有相同的参数个数 工作
他们的不一样点: 参数
1.抽象类中能够有非抽象的方法而接口中只可以有抽象的方法!
2.一个子类能够继承多个接口,而一个类只能继承一个抽象类!
3.接口的使用方式经过implements关键字进行,抽象类则是经过继承extends关键字进行!
4.在声明上
接口中只能声明抽象方法(包括静态抽象方法)和静态变量.而抽象类除了包含通常类的特色,即包括属性和通常方法外,还能够声明抽象方法(包括静态抽象方法).
5.在写法上
1、接口中的抽象方法前不用也不能加abstract关键字,默认隐式就是抽象方法,也不能加final关键字来防止抽象方法的继承.而抽象类中抽象方法前则必须加上abstract表示显示声明为抽象方法.
2、接口中的抽象方法默认是public的,也只能是public的,不能用private、protected修饰符修饰.而抽象类则能够。
6. 一个非抽象类若是extends一个抽象类后只需(而且必需)全部的实现抽象方法就好了,非抽象方法能够不实现。若是implements一个接口,就必须实现接口中的全部方法(由于接口中的方法均为抽象方法);