
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,那么这种设计就是相当必要的。
CSub 类也必须定义为abstract,
即: abstract public CSub extends CBase() {}
再补充说明:
在Interface中被定义的 abstract 方法 setParams() 是不允许被客户端调用的,但它却必须被分级到诸如电吹风类的类实现,并且也只能在电吹风类中实现,因为需求是——大多数的精确到电吹风类的业务逻辑都有所不同,这时,你们说 interface 中的 abstract 是不是意义重大呢?
本文通过具体示例展示了面向对象设计的基本原则和技术实现方法。通过电器产品的库存价值计算这一应用场景,详细介绍了接口、抽象类及具体类之间的继承与实现关系,强调了抽象方法在不同业务逻辑实现中的重要性。
1343

被折叠的 条评论
为什么被折叠?



