zoukankan      html  css  js  c++  java
  • java 抽象类实现接口

    1.抽象类肯定可以实现接口; 
    2.这不是有没有意义的事情,是一种思想,当你自己写的类想用接口中个别方法的时候(注意不是所有的方法),那么你就可以用一个抽象类先实现这个接口(方法体中为空),然后再用你的类继承这个抽象类,这样就可以达到你的目的了,如果你直接用类实现接口,那是所有方法都必须实现的; 
    3.这种思想在java.swing.event包中运用的非常多,里面一般以Adapter为后缀的都是抽象类,它们都实现了特定的事件接口,大家可以看看。 
    4.抽象类定义在接口与真正的实现类之间有一个重要的作用,就是过滤掉一些不需由真正的实现类重写的方法。举一个例子,譬如说HttpServlet这个抽象类类中有init(),doGet(),doPost(),destroy()等方法,但是真正要让程序员实现的只有doGet(),doPost(),就是因为HttpServlet中定义了对一些方法的默认实现,这样一个类在扩展它时,就不必重写所有HttpServlet或者其父类所实现的所有接口的所有方法。经常是这样,即使我们重写init()方法,也只是调用super.init().

          通过下面例子,可以很好的理解:

          例:有一个接口Window,有三个方法,draw(),putColor(),setPosition()三个方法,程序员在设计页面时只关注对其进行位置定位(画图draw()和着色putColor()则由美工实现),所以他只需要实现setPosition()方法,而其余两个不用实现。则设计如下:

          //接口

          interface Window{

                 public void draw();

                 public void putColor();

                 public void setPosition();

          }

     

         /**

          *抽象类,不实现需要的方法。而实现的不需要的方法的方法体设为空,

          */    

         abstract class DesignedPage implements Window{

                 public void draw(){}

                 public void putColor(){}

         }

         

         /**

           * 具体实现类,实现特定的方法,该类中只有需要的方法

           */

          public class DesingedPageA  extends DesignedPage{

                 public void setPosition(){

                       //set the window position

                 }   

        }

     

      

         通常情况下,如果我们需要在具体实现类中实现draw()方法时,都是调用父类的draw()方法(super.draw())。

  • 相关阅读:
    C语言入门(16)——C语言的数组
    快速插入一百万行数据储存过程
    如何将两个表名对调
    MySQL规范
    MySQL运行环境部署规范
    mysql查看存储过程
    批量杀死MySQL连接的几种方法
    查看堵塞的SQL
    mysqldump备份脚本
    查看当前的数据和索引的总大小
  • 原文地址:https://www.cnblogs.com/gaoxiangde/p/4379889.html
Copyright © 2011-2022 走看看