当前位置: 代码迷 >> J2SE >> java接口的有关问题
  详细解决方案

java接口的有关问题

热度:61   发布时间:2016-04-23 20:14:31.0
java接口的问题
public interface Command {
//接口里定义的process方法用于封装“处理行为”
void process(int[] target);
}

public class ProcessArray {

public void process(int[] target,Command cmd)
{
cmd.process(target);
}
}

public class AddCommand implements Command{

public void process(int[] target) {
// TODO Auto-generated method stub
int sum = 0;
for(int i=0;i<target.length;i++)
{
sum+=target[i];
}
System.out.println("数组元素的总和是:"+sum);
}
}

public class PrintCommand implements Command{

public void process(int[] target) {
// TODO Auto-generated method stub
for(int i=0;i<target.length;i++)
{
System.out.println("数组元素为:"+target[i]);
}
}
}

public class TestCommand {
public static void main(String[] args)
{
ProcessArray pa = new ProcessArray();
int[] target = {3,-4,6,4};
pa.process(target, new PrintCommand());
System.out.println("---------------------");
pa.process(target, new AddCommand());
}
}

各位好,初学java,关于上面的代码有个小问题,为什么Command是一个接口,而在ProcessArray类中cmd可以调用没有方法体的process抽象方法?
------解决思路----------------------
首先,你要理解什么叫做接口.  接口其实是指一种行为,表名你能够做什么,但是具体怎么做是在类中进行申明的

他存在的原因在于 java 只支持单继承,因此当我们需要同时拥有多种特性进行复用的时候,就需要使用到接口,这是为了避免使用多继承的取舍.

而接口是无法直接实体化的,因此如果有一个接口对象,他要么为 null, 要么为一个实现了该接口的实体类对象,因此当你调用接口方法的时候,实际上是调用的实现了接口的实体类对象的方法.既然如此,方法已经实现,自然可以被调用
------解决思路----------------------
子类可以向上转型为父类,实体类也可以转型为他所实现的接口

你可以看看面向对象编程中的多态,使用多态可以降低程序的耦合程度
  相关解决方案