黑马程序员技术交流社区

标题: 刚学抽象类,总结一下抽象类与一般类的区别,与大家分享 [打印本页]

作者: ZhangHeng    时间: 2015-7-7 22:16
标题: 刚学抽象类,总结一下抽象类与一般类的区别,与大家分享
本帖最后由 ZhangHeng 于 2015-7-7 22:17 编辑

抽象类与一般类的区别
        1、抽象类和一般类没有太大的不同。该如何描述事物,还是如何描述事物。只不过,该事物中出现了一些不知道具体内容的方法部分。这些不确定的部分,也是该事物的功能,需要明确出来,但是无法定义主体。通过抽象方法来表示。
        2、抽象类比一般类多了个抽象函数。就是在类中可以定义抽象方法。
        3、抽象类不可以实例化。
        4、抽象类虽然不能创建对象,但是也有构造函数。供子类实例化调用。
注:1、被abstract修饰的函数不能同时被private、final、static修饰。
      原因:
                final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
                private:抽象类中的私有的抽象方法,不被子类所知,就无法被复写。
                           而抽象方法出现的就是需要被复写。
                static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。
                            可是抽象方法运行没意义。
        2、抽象有一个特殊的地方:抽象类中可以不定义抽象方法。这样做可以不让本来实例化,也可以用于模块设计。
如下面的小程序:
  1. /*
  2. 需求:获取一段程序的运行时间
  3. 原理:将程序开始执行到执行结束的时间相减就是程序的运行时间了
  4. 思路:1、由于想要获取的程序时未知的,可以将其抽象出去,通过子类继承复写的方式获得程序
  5.       2、利用java中提供的当前时间功能记录下程序开始执行和执行结束的时间,然后相减
  6. */  
  7. abstract class  GetTime  
  8. {  
  9.     public final void getTime()//加final表示不能被复写  
  10.     {  
  11.         long start=System.currentTimeMillis();//开始执行时间  
  12.         program();  
  13.         long end=System.currentTimeMillis();//执行结束时间  
  14.         System.out.println("毫秒"+(end-start));  
  15.     }  
  16.     abstract void program();//由于程序不确定,故抽象出去  
  17. }  
  18.   
  19. //要获取执行时间的程序  
  20. class GetProgram extends GetTime  
  21. {  
  22.     void program()  
  23.     {  
  24.         for(int x=0;x<1000;x++)  
  25.             System.out.print(x+" ");  
  26.     }  
  27. }  
  28. class TemplateDemo  
  29. {  
  30.     public static void main(String[] args)   
  31.     {  
  32.         new GetProgram().getTime();  
  33. //      System.out.println("Hello World!");  
  34.     }  
  35. }  
复制代码




作者: ym123456    时间: 2015-7-7 22:17
dingixiaigz
作者: 炎舞霜冬    时间: 2015-7-7 22:28
很厉害啊哈哈
作者: 曹操001    时间: 2015-7-7 22:30
虽说有点水,但是我还是要给你顶一下!
作者: xuhao3622603    时间: 2015-7-7 22:49
总结的不错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2