`

徐培成老师说,Interface和abstract到底哪里不一样

    博客分类:
  • Java
阅读更多

徐培成老师说,Interface和abstract到底哪里不一样!  

 在做swing 和awt编程的时候, 如果用Interface 那就累死了。

 应该用抽象类,去使用匿名内部类  new 抽象类(){},如果是接口的话就不能使用匿名内部类这种感觉了

 

这就是适配器模式 adapter模式

 

配器类

 

 这些空的方法是一种浪费,有时也是一种混乱。除非看过这些空方法的代码,程序员可能会以为这些方法不是空的。即便他知道其中有一些方法是空的,也不一定知道哪些方法是空的,哪些方法不是空的,除非看过这些方法的源代码或是文档。

 

 

 

  缺省适配模式可以很好的处理这一情况。可以设计一个抽象的适配器类实现接口,此抽象类要给接口所要求的每一种方法都提供一个空的方法。就像帮助了鲁智深的“上应天星”一样,此抽象类可以使它的具体子类免于被迫实现空的方法。

 

public interface 和尚 {

    public void 吃斋();

    public void 念经();

    public void 打坐();

    public void 撞钟();

    public void 习武();

    public String getName();

}

 

public class 鲁智深 implements 和尚{

    public void 习武(){

        拳打镇关西;

        大闹五台山;

        大闹桃花村;

        火烧瓦官寺;

        倒拔垂杨柳;

    }

    public String getName(){

        return "鲁智深";

    }

}

 由于鲁智深只实现了getName()和习武()方法,而没有实现任何其他的方法。因此,它根本就通不过Java语言编译器。

众僧说:“此人形容丑恶、相貌凶顽,不可剃度他",但是长老却说:”此人上应天星、心地刚直。虽然时下凶顽,命中驳杂,久后却得清净。证果非凡,汝等皆不及他。”

 原来如此!看来只要这里也应上一个天星的话,问题就解决了!使用面向对象的语言来说,“应”者,实现也;“天星”者,抽象类也。

 

public abstract class 天星 implements 和尚 {

    public void 吃斋(){}

    public void 念经(){}

    public void 打坐(){}

    public void 撞钟(){}

    public void 习武(){}

    public String getName(){

        return null;

    }

}

 

public class 鲁智深 extends 和尚{

    public void 习武(){

        拳打镇关西;

        大闹五台山;

        大闹桃花村;

        火烧瓦官寺;

        倒拔垂杨柳;

    }

    public String getName(){

        return "鲁智深";

    }

}

 

分享到:
评论
1 楼 spiniper 2014-12-16  
你说的那个老师有那么说么?如果是,我只能说那个老师不懂,接口也可以匿名内部类的,只是接口没有实现,所有方法都要实现而已。

相关推荐

Global site tag (gtag.js) - Google Analytics