一.什么是接口?
接口是一种特殊的抽象类,接口中只有抽象方法和全局变量,且没有构造函数。
接口的特点有:
- Java接口中只能包含public,static,final类型的成员变量(默认都是public,static,final类型的,因此在写的时候可以省略)和public,abstract类型的成员方法(默认都是public,abstract类型的,因此在写的时候可以省略);
- 接口中没有构造方法,不能被实例化,接口的对象可以利用子类对象的向上转型进行实例化;
- 一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口(接口可以多继承);
- 接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口,当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类;
二.接口的应用。
定义一个接口Person,以及他的两个实现子类Programmer(程序员)和Pm(产品经理);
设计一个工厂类Factory,当需要增加更多的子类的时候只需要在Factory中修改方法即可。
Person接口:
package test;
public interface Person {
public static final String type="员工";
String sex="男";
public abstract void work();
public abstract void recreation();
}
工厂类,来对应出具体的子类:
package test;
public class Factory {
public static Person getType(String className){
if(className.equals("Programmer")){
return new Programmer();
}
if(className.equals("Pm")){
return new Pm();
}
return null;
}
}
Programmer类实现了Person接口:
package test;
public class Programmer implements Person{
public void recreation() {
System.out.println("我的娱乐活动就是看书");
}
public void work() {
System.out.println("写代码,调试bug");
}
}
Pm类实现了Person接口:
package test;
public class Pm implements Person {
public void recreation() {
System.out.println("我的娱乐活动是关注实时的互联网动态");
}
public void work() {
System.out.println("整理需求,沟通客户");
}
}
定义一个主类,实现不同人员的不同表现形态:
package test;
public class MainClass {
public static void main(String[] args){
Person p1=Factory.getType("Programmer");
p1.work();
p1.recreation();
Person p2=Factory.getType("Pm");
p2.work();
p2.recreation();
}
}
输出结果:
写代码,调试bug
我的娱乐活动就是看书
整理需求,沟通客户
我的娱乐活动是关注实时的互联网动态