目录
通俗来说,一个父类,因为它的某些方面的通性,会被子类继承并重写方法,只要父类的声明的方法有意义,而方法体没有存在的必要,就把这种方法称为抽象方法。
tips:在java中,如果一个类包含了抽象的方法。那么该类就是一个抽象类
举个例子,汽车这个名词很广泛,有许许多多不同的汽车,同时这些汽车也可能有共同的特征,那么就将“汽车”定义为抽象类,“汽车”中的方法就可以有“汽车启动”、“汽车鸣笛”、“汽车刹车”等通性方法。
修饰符 abstract 返回类型 方法名(参数列表);
- //抽象类
- public abstract class Car {
-
- public String name;
-
- /**
- * 抽象方法
- */
- //汽车引擎启动
- public abstract void engineStart();
-
- //汽车跑动
- public abstract void run();
-
- //汽车关闭引擎
- public abstract void engineOff();
-
- /**
- * 普通方法
- */
- //输出汽车名字
- public void soutName(){
- System.out.println("这是辆汽车,子类汽车名字为" + name);
- }
-
- //构造方法
- public AbstractTest(String name){
- this.name = name;
- }
-
- }
- public class MyCar extends Car{
-
- public AbstractSon1(String name) {
- super(name);
- }
-
- @Override
- public void engineStart() {
- System.out.println("库里南V12发动机启动嗷嗷叫");
- }
-
- @Override
- public void run() {
- System.out.println("库里南跑的賊哇快");
- }
-
- @Override
- public void engineOff() {
- System.out.println("库里南停下了,大伙围观拍照");
- }
-
- public static void main(String[] args) {
- AbstractSon1 as1 = new AbstractSon1("库里南");
- as1.soutName();
- as1.engineStart();
- as1.run();
- as1.engineOff();
- }
- }

接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要是封装的方法,包含了抽象方法(JDK≤1.7),默认方法和静态的方法(JDK1.8),私有方法(JDK1.9)
通俗来说接口比抽象类还抽象,只能封装方法,对子类的规范性有更好的约束,为了实现多继承,可以使用接口
修饰符 interface 接口名称
-
- public interface Car {
-
- //汽车引擎启动
- public abstract void engineStart();
-
- //汽车跑动
- public abstract void run();
-
- //汽车关闭引擎
- public abstract void engineOff();
-
- }
-
- public class CarBehavior implements Car{
-
- @Override
- public void engineStart() {
- System.out.println("汽车发动引擎");
- }
-
- @Override
- public void run() {
- System.out.println("汽车跑");
- }
-
- @Override
- public void engineOff() {
- System.out.println("汽车关闭引擎");
- }
-
- public static void main(String[] args) {
- CarBehavior cb = new CarBehavior();
- cb.engineStart();
- cb.run();
- cb.engineOff();
- }
- }

| 相同点 | |
|---|---|
| 接口 | 抽象类 |
| 都不能被实例化 | |
| 接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化 | |
| 不同点 | |
| 接口变量必须用final修饰 | 抽象类中可以有定义变量 |
| 接口的所有方法没有方法体 | 抽象类中可以有普通成员方法 |
接口中的方法修饰符号 只能是public | 抽象类中的抽象方法可以有public,protected,default |
| 接口中没有构造方法 | 可以有构造方法 |
| 接口可以多个实现类 | 抽象类只能单一继承 |
1、当我们需要一组规范的方法的时候,我们就可以用接口,在具体的业务中,来对接口进行实现,能达到以不变应对万变,多变的需求的情况我们只需要改变对应的实现类 。
2、如果多个实现类中有者相同可以复用的代码 这个时候就可以在实现类和接口之间,添加一个抽象类,把公共的代码抽出在抽象类中。然后要求不同实现过程的 子类可以重写抽象类中的方法,来完成各自的业务。