今天刚刚给学生讲了Java中接口的问题,写下来与大家分享:在现实世界中有很多与接口等同的概念:USB接口:数码相机实现了USB接口,电脑通过USB接口与数码相机交换数据(使用USB接口) GUI(图形用户接口,也就是界面): 软件开发人员实现了GUI后面的功能,软件用户通过GUI使用软件的功能(使用GUI)可见,接口帮助我们把实现与使用分开,再看看下面的程序:interface I { //接口中的方法都是抽象方法,接口是不能被实例化的 public int add(int m, int n); //接口中的方法只定义了能做什么,但没有定义怎么做 static int MAX = 100; //接口中还可以定义常量 }//通过类G1实现了接口I,也就是把接口中的所有抽象方法进行了定义 class G1 implements I { public int add(int m, int n){ int r = m+n; return r; } }//通过类G2使用接口I class G2 { //什么样的实际参数可以传给m(m是接口I类型的引用)? //传过来的必须是实现了接口I的类G1类型的对象 public void f (I m ,int s, int t ){ int r = m.add(s,t); System.out.println(r); } }public class InterfaceTest { public static void main(String [] args){ I x = new G1(); G2 y = new G2(); y.f(x,4,6); //x是接口I的实现类G1类型的对象 } }扩展:CoreJava里面的重要接口:Comparator, Comparable,Collection, Set, List, Map, DataSource, Connection, Statement, ResultSet, PreparedStatement等。在J2EE技术中接口也发挥着重要的作用,如Spring技术是基于接口的,EJB技术也是基于接口的。---------------- BetterYou.com.cn
是Class就有封装功能, 答案不合格
接口不是为了封装,因为java已经有了更好的封装的技术,private,protected
接口最大的作用在于:把实现和定义分开,这样在进行主装的时候,就不需要考虑具体的实现,那么接口就可以任意组合
说到继承,继承只有一种情况下才考虑,就是需要上溯造型的时候。
GUI(图形用户接口,也就是界面):
软件开发人员实现了GUI后面的功能,软件用户通过GUI使用软件的功能(使用GUI)可见,接口帮助我们把实现与使用分开,再看看下面的程序:interface I {
//接口中的方法都是抽象方法,接口是不能被实例化的
public int add(int m, int n); //接口中的方法只定义了能做什么,但没有定义怎么做
static int MAX = 100; //接口中还可以定义常量
}//通过类G1实现了接口I,也就是把接口中的所有抽象方法进行了定义
class G1 implements I {
public int add(int m, int n){
int r = m+n;
return r;
}
}//通过类G2使用接口I
class G2 {
//什么样的实际参数可以传给m(m是接口I类型的引用)?
//传过来的必须是实现了接口I的类G1类型的对象
public void f (I m ,int s, int t ){
int r = m.add(s,t);
System.out.println(r);
}
}public class InterfaceTest {
public static void main(String [] args){
I x = new G1();
G2 y = new G2();
y.f(x,4,6); //x是接口I的实现类G1类型的对象
}
}扩展:CoreJava里面的重要接口:Comparator, Comparable,Collection, Set, List, Map, DataSource, Connection, Statement, ResultSet, PreparedStatement等。在J2EE技术中接口也发挥着重要的作用,如Spring技术是基于接口的,EJB技术也是基于接口的。----------------
BetterYou.com.cn
而在类中把他们都定义成静态变量,使用的时候和用接口定义是一样的。
那这两种方法哪种更好?还是都不行呢?
尽管明白飞机和鸟都能飞,都有fly的方法,
但什么时候该用接口还真不清楚。
你回复中提到的情况,在接口定义常量,或者在类中定义常量,
其实并没有什么本质的区别。BetterYou.com.cn
虚类倾向于多态,把功能的实现延迟
他们的方向不同
没有从问题层面回答,有什么样的条件和环境,才需要使用接口或虚类。trumplet(检查) 引用的内容是从正面回答了问题。
但我还是没看明白为什么?