黑马程序员技术交流社区

标题: 关于抽象类里面的静态方法问题 [打印本页]

作者: 学习代码    时间: 2014-3-28 14:36
标题: 关于抽象类里面的静态方法问题
  1. import java.util.*;
  2. import java.text.*;

  3. class CalendarDemo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Calendar c= Calendar.getInstance();//这里有点小迷糊。帮忙解释一下,谢谢
  8.                 //sop(c);                                                        //是不是类中的静态方法,不管类是不是抽象的都可以用类名调用呢?
  9.                 sop(c.get(Calendar.YEAR));
  10.         }


  11. public static void sop(Object obj)
  12.         {
  13.                 System.out.println(obj);
  14.         }
  15. }
复制代码

作者: 苏伯亚    时间: 2014-3-28 14:55
类中的方法引用确实可以类名引用,但是静态类中只能引用静态方法。
Calendar c= Calendar.getInstance();
这句话就是创建Calendar 对象c而Calendar.getInstance()则是调用Calendar里面的getInstance方法。

    具体解释就是Calendar类是个抽象类,因此本身不能被实例化,然而在却创建了Calendar 的对象,但并不是抽象类可以创建对象。这个对象并不是Calendar 自身实例,而是其子类实例,这是在getInstance方法内部其实是实例化了GregorianCalendar 对象并返回了。
    这里还反映了一种设计模式,很多模式里都用到getInstance方法来生成一对象,类中static 变量和方法可通过 类名.××访问

希望可帮到你
作者: H-Deka    时间: 2014-3-28 15:15
只要是静态方法,都可以直接使用类名直接调用该静态方法
作者: 宋超2356    时间: 2014-3-28 18:50
本帖最后由 宋超2356 于 2014-3-28 18:52 编辑
  1. import java.util.*;
  2. import java.text.*;

  3. class CalendarDemo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Calendar c= Calendar.getInstance();// Calendar是抽象的,这里抽象类是不可能有实例的,这里是通过调用子类                GregorianCalendar的方法getInstance()创建的子类实例,并c指向其
  8.                 //sop(c);                          //静态方法调用方式就是直接的 类名.方法名()不用也无法创建实例                     
  9.                 sop(c.get(Calendar.YEAR));
  10.         }


  11. public static void sop(Object obj)
  12.         {
  13.                 System.out.println(obj);
  14.         }
  15. }
复制代码





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