虽然interface没有方法体,但是如果你的interface中有abstract接口,那么就必须定义这个interface为abstract了,其实,它的意义巨大,给个例子给吧:abstract public interface IA { public void run() ; abstract public void setParams() ; } abstract public class CBase implements IA { public CBase() {} abstract public String[] getParams() { } public void run() { String[] s = getParams(); if (s != null && s.length() > 0) { for (int i=0; i<s.length() ; i++ ) { System.out.println("s[" + i + "]:" + s[i])); } } } } public class CSub entexted CBase { public CSub() {} protected String[] s ; public String[] getParams() { return this.s ; } } public class DSubSub extends CSub { public DSubSub() {} public void setParams() { this.s = {"abcd", "efg"} ; } public static void main(String[] args) { IA dsubsub = new DSubSub() ; dsubsub.run() ; } }输出结果: s[0]:abcd s[1]:efg从设计意义上来说,我举个例子: CBase 类是所有电器产品总类,其中的run()函数负责输出某种电器产品的库存总价值。 CSub 类是所有小家电产品类,其中getParams()函数负责得到某种小家电产品库存总价值。 DSubSub类是小家电中的电吹风机类,其中的setParams()函数负责电吹风机的特有计算库存产品价值的方式。 当你的每一类电器产品都有自己不同的价值计算方式时,使用这种构架就可以很好的分类计算。 而这些业务逻辑实现类在三层构架中是不提供给客户端调用的,提供给客户端的仅仅是Interface,那么这种设计就是相当必要的。
public void run() ;
abstract public void setParams() ;
}
abstract public class CBase implements IA {
public CBase() {}
abstract public String[] getParams() { }
public void run() {
String[] s = getParams();
if (s != null && s.length() > 0) {
for (int i=0; i<s.length() ; i++ ) {
System.out.println("s[" + i + "]:" + s[i]));
}
}
}
}
public class CSub entexted CBase {
public CSub() {}
protected String[] s ;
public String[] getParams() {
return this.s ;
}
}
public class DSubSub extends CSub {
public DSubSub() {}
public void setParams() {
this.s = {"abcd", "efg"} ;
}
public static void main(String[] args) {
IA dsubsub = new DSubSub() ;
dsubsub.run() ;
}
}输出结果:
s[0]:abcd
s[1]:efg从设计意义上来说,我举个例子:
CBase 类是所有电器产品总类,其中的run()函数负责输出某种电器产品的库存总价值。
CSub 类是所有小家电产品类,其中getParams()函数负责得到某种小家电产品库存总价值。
DSubSub类是小家电中的电吹风机类,其中的setParams()函数负责电吹风机的特有计算库存产品价值的方式。
当你的每一类电器产品都有自己不同的价值计算方式时,使用这种构架就可以很好的分类计算。
而这些业务逻辑实现类在三层构架中是不提供给客户端调用的,提供给客户端的仅仅是Interface,那么这种设计就是相当必要的。
不能感觉到 cancer2000(夜之哀伤) 的那段代码中加上abstract有什么好处~~~,愿闻其详
c++没interface只有abstract class,方法必须加abstract修饰。