如何理解接口和抽象?

 

抽象类与接口

1.啥是抽象类呢?

我们可以这样理解,我们作为一个工程设计师,我们只负责设计这个类的图纸,这个图纸就相当于抽象类。当我们把图纸交给具体实施的工人的时候,他们要按照图纸的内容,具体完成我们的设计架构,而我们并不懂得如何具体实施,我们只负责定义与设计。

下面就是我们的图纸了(Demo08_abstract)

public abstract class Demo08_abstract {

   //约束~ 有人帮我们实现
   //abstract , 抽象方法,只有方法名字,没有方法实现
   public abstract void doSomething();

   //1.不能new这个抽象类,只能靠子类去实现它:约束!
   //2.抽象类中可以写普通方法
   //3.抽象方法必须在抽象类中
   //抽象的抽象:约束~
}

我们在抽象类中定义了一个抽象的方法,让工人帮我们做一些我们规定的事。

 

当工人通过抽象类(A)的继承拿到我们的图纸时(Demo08_abstract),他们将具体实施我们图纸的定义与设计的工作。

 

public class A extends Demo08_abstract {
   @Override
   public void doSomething() {
       //具体实施的内容了
       
  }
}

//////////////////////////分割线/////////////////////////////////////////////

2.啥事接口呢?

 

  • 普通类:只有具体实现

  • 抽象类:具体实现和规范(抽象方法)都有!

  • 接口:只有规范!自己无法写方法~专业的约束! 约束和实现分离:面向接口编程

 

其实接口就是规范,当我们是一个领导的时候,我们要给底下的人安排任务的时候,我们就会定制一个表上面有我们分配的任务。例如

1.小张完成通知开会的任务。

2.小李完成整理考勤表的任务。

3.小王完成年度报表的任务。

4.小吴完成金额核对的任务。

5.

6.

当我们制定好这张表的时候,就是相当于制定了一个接口,也就是初步的任务分派。剩下的具体实施就是交给员工们拿到这个表(接口)之后,具体实现了相应的操作了。

下面是我们的任务表。

public interface UserService {

   //常量~ public static final
   int AGE = 99;

   //接口中的所有定义其实都是抽象的 public abstract
   public abstract void 通知开会(String name);
   public abstract void 整理考勤表(String name);
   public abstract void 完成年度报表(String name);
   public abstract void 完成金额核对(String name);
}

 

下面是我们任务的第二张表:

public interface TimeService {
   void 请全员吃饭();
}

 

下面是我们的员工拿到表以后的具体实施。

public class UserServiceImpl implements UserService,TimeService{

   @Override
   public void 通知开会(String name) {
//具体操作
  }

   @Override
   public void 整理考勤表(String name) {
//具体操作
  }

   @Override
   public void 完成年度报表(String name) {
//具体操作
  }

   @Override
   public void 完成金额核对(String name) {
//具体操作
  }

   @Override
   public void 请全员吃饭() {

  }

}

 

 

注意

我们可以发现,接口就是定义一些方法,让不同的人去实现,且接口不能被实例化,接口中也没有构造方法。

而implements可以实现多个接口,且必须要重写接口中的方法。

posted @ 2020-10-29 15:42  Strive_ToLife  阅读(95)  评论(0编辑  收藏  举报