思路:理解面向接口编程很重要的一点是接口回调,用接口声明的变量称作接口变量,属于引用型变量,可以存放实现该接口的类的实例的引用,也就是对象引用。
接口回调:把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。
好处:面向接口的编程方式是面向对象设计的一个原则,使用这种编程思想,可以很容易实现代码的复用。充分利用接口可以极好地降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。
核心思想:使用接口回调,及接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。
在这里要强调一下抽象类与接口的区别:
- abstract类和接口都可以有抽象方法
- 接口中只能有常量,不能有变量
- abstract类中既可以有常量也可以有变量
- abstract类中可以有非abstract方法,而接口不可以
- abstract类除了提供重写的abstract方法外,还提供了子类可以继承的变量和非abstract方法
- 如果需要从父类中继承一些变量或继承一些重要的非abstract方法,就可以考虑用abstract类;如果不需要继承,只是需要继承一些方法,就可以使用接口
示例代码:
1、通用接口类:
public interfacce StuInformation{
public void showInfo();
public String getInfo();
}
2、实现接口的类(接口变量)
public class AStu implements StuInformation{
public AStu(){}
public void showInfo(){
System.out.println("WWWWWW");
}
public String getInfo(){
return "A stu";
}
}
public class BStu implements StuInformation{
public BStu(){}
public void showInfo(){
System.out.println("EEEEEEEEEE");
}
public String getInfo(){
return "B stu";
}
}
3、主类
public class StuMain{
StuMain stu;
public StuMain getInstance(){
if(stu==null){
stu=new StuMain();
}
}
public void show(StuInformation info){
info.getInfo();
info.showInfo();//接口回调
}
}
4、程序主入口
public static void main(String[] args){
StuMain stu=StuMain.getInstance();
stu.show(new AStu());
stu.show(new BStu());//接口调用
}
最后,程序会根据对象的不同调用不同的方法,后期如果想增加调用对象,只要增加实现接口方法的对象即可。