如何理解接口和抽象?
抽象类与接口
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 {
//////////////////////////分割线/////////////////////////////////////////////
2.啥事接口呢?
-
普通类:只有具体实现
-
抽象类:具体实现和规范(抽象方法)都有!
-
接口:只有规范!自己无法写方法~专业的约束! 约束和实现分离:面向接口编程
其实接口就是规范,当我们是一个领导的时候,我们要给底下的人安排任务的时候,我们就会定制一个表上面有我们分配的任务。例如
1.小张完成通知开会的任务。
2.小李完成整理考勤表的任务。
3.小王完成年度报表的任务。
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{
注意
我们可以发现,接口就是定义一些方法,让不同的人去实现,且接口不能被实例化,接口中也没有构造方法。