[英]how Abstract Calendar class's getInstance method returns a calendar Object
[英]help understanding abstract classes: java calendar method getInstance()
我无法理解抽象类背后的概念。 我正在阅读的定义是它们至少有一个声明但缺乏实现的方法,因此无法实例化该类。 java日历类是抽象的,无法使用New运算符进行实例化,但是有一个名为getInstance()的方法返回一个日历对象。 这是如何运作的?
Calendar cal = new Calendar(); //doesn't work
Calendar cal = Calendar.getInstance(); //works
抽象类不具有任何抽象方法。 这就是通常的做法。
现在, Calendar.getInstance()
通过实际创建子类的实例来工作。 你被允许调用它,因为它是一个静态方法。 返回值是指相关子类的实例,但返回类型只是Calendar
,由于正常的继承规则,这很好。
以下是相同类型方法的示例,但没有Calendar
所有复杂性 - 相同的原则适用:
abstract class AbstractParent {
public static AbstractParent getInstance() {
// Normally you'd have code to work out which
// concrete class to actually use
return new ConcreteChild();
}
public abstract void sayHello();
}
class ConcreteChild extends AbstractParent {
@Override public void sayHello() {
System.out.println("Hello from ConcreteChild");
}
}
public class Test {
public static void main(String[] args) {
AbstractParent parent = AbstractParent.getInstance();
parent.sayHello();
}
}
由于Calendar
是一个抽象类,因此无法创建这样的新实例。 如果您查看doc ,找到其上列出static Calendar
任何方法,您将找到getInstance()
,因此您可以执行以下操作: -
Calendar cal = Calendar.getInstance();
现在,如果再次查看同一个doc,请查看页面顶部的Direct Known Subclasses
,这里列出的类是Calendar的实现...所以,在这种情况下,你可以使用GregorianCalendar
,就像这个也是:-
Calendar cal = new GregorianCalendar();
两件作品......
抽象类CAN实现静态方法。
getInstance()是一个静态方法,它返回抽象类的默认具体实现。
在这种情况下,我相信它实际上返回一个GregorianCalendar实例。
Calendar类的getInstance()方法不返回Calendar类的对象,而是返回一个带有“默认时区和语言环境”的日历,在我的情况下,GregorianCalendar是Calendar的子类。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.