十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
设计模式里对这类设计有很详细的说明,看一下挺好。
目前创新互联公司已为超过千家的企业提供了网站建设、域名、网站空间、网站托管、服务器租用、企业网站设计、天坛街道网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
你这个例子也很典型,对理解接口来说,挺不错的一个例子
//接口,在这里用接口是很恰当的,因为任何水果都有计算各自的总价格的行为,这个行为分离出来,最好的方法就是做成接口
public interface IAccount {
public int getAccount();//get one fruit price
}
//水果类,因为任何一种水果的价格计算都是质量乘以单价,所以计算总价值的方法可以直接在水果类中实现,但是由于它只是个抽象类,真正执行的时候,是计算了具体某种水果的单价乘以质量。//这样就省去了在每个派生出来的水果类里实现计算价值的方法。
public abstract class Fruit implements IAccount{
protected int weight;
protected int price;
public int getAccount() {
return this.price*this.weight;
}
}
//具体的水果类,水果类的派生类
//苹果类
public class Apple extends Fruit{
public Apple(int w) {
this.price = 2;//因为每种水果不同,所以不必要在new它的时候再传给它,直接在类里赋值即可,至于好的设计是完成相应的get和set方法,这个再扩展。
this.weight = w;
}
}
//桔子类
public class Orange extends Fruit{
public Orange(int w) {
this.price = 3;//桔子的价格就春带裤不同于苹果的了
this.weight = w;
}
}
//交易类
public class Bussiness {
/**
* @param args
*/
public static void main(String[] args) {
Fruit apple = new Apple(10);
Fruit orange = new Orange(15);
int allMoney = apple.getAccount() + orange.getAccount();
System.out.println(allMoney);
}
}
这样行悔,水果类就可以很方便的派生,只需声明一个类继承水果类(一定要是个抽象类),然后给price赋值,就可以在交易类里实例化并计算总价值,而不需要改动水果类里的扒简任何代码。