经常用,但没考虑过这个问题,都是Calendar c = Calendar.getInstance();这样取的!
怎么兼容法 public就不能兼容了吗
Calendar c = Calendar.getInstance();不是这样实例化的吗?你想一下就知道了啊 因为他的实例化是单态模式,所以他的构造方法肯定需要有一些限制,比如限制为private--这样他的子类或者其他的类就都不能直接new而获得该对象,如果设置成protected的话只有他的子类可以new,但是其余的类就不能了啊,你可以试着写一个Calendar的子类,然后你在使用new,我相信是完全可以的了
import java.util.Calendar; public class Cal extends Calendar{ @Override public void add(int field, int amount) { // TODO Auto-generated method stub
} @Override public int getGreatestMinimum(int field) { // TODO Auto-generated method stub return 0; } @Override public int getLeastMaximum(int field) { // TODO Auto-generated method stub return 0; } @Override public int getMaximum(int field) { // TODO Auto-generated method stub return 0; } @Override public int getMinimum(int field) { // TODO Auto-generated method stub return 0; } @Override public void roll(int field, boolean up) { // TODO Auto-generated method stub
}
public static void main(String args[]){ Cal cal = new Cal(); long time=cal.time; System.out.println(time); }}
因为他的实例化是单态模式,所以他的构造方法肯定需要有一些限制,比如限制为private--这样他的子类或者其他的类就都不能直接new而获得该对象,如果设置成protected的话只有他的子类可以new,但是其余的类就不能了啊,你可以试着写一个Calendar的子类,然后你在使用new,我相信是完全可以的了
public class Cal extends Calendar{ @Override
public void add(int field, int amount) {
// TODO Auto-generated method stub
} @Override
protected void computeFields() {
// TODO Auto-generated method stub
} @Override
protected void computeTime() {
// TODO Auto-generated method stub
} @Override
public int getGreatestMinimum(int field) {
// TODO Auto-generated method stub
return 0;
} @Override
public int getLeastMaximum(int field) {
// TODO Auto-generated method stub
return 0;
} @Override
public int getMaximum(int field) {
// TODO Auto-generated method stub
return 0;
} @Override
public int getMinimum(int field) {
// TODO Auto-generated method stub
return 0;
} @Override
public void roll(int field, boolean up) {
// TODO Auto-generated method stub
}
public static void main(String args[]){
Cal cal = new Cal();
long time=cal.time;
System.out.println(time);
}}
如果你有JDK的话,可以查看一下getInstance的源代码
第一,getInstance通过不同的时区来初始化一个日历
第二,进一步的,它会根据不同的你的系统时区、国家来初始化不同的日历实例
你可以看看这个部分private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
// If the specified locale is a Thai locale, returns a BuddhistCalendar
// instance.
if ("th".equals(aLocale.getLanguage())
&& ("TH".equals(aLocale.getCountry()))) {
return new sun.util.BuddhistCalendar(zone, aLocale);
} // else create the default calendar
return new GregorianCalendar(zone, aLocale);
}
这是个工厂模式的典型应用,如果你一定要用NEW来初始化这个抽象的实例,你又怎么做到自动的分配出不同的实例对象
这样就能保证对象的初始化实例,由getInstance()方法来负责
抱歉回复晚了
public的构造函数才能被new所实例化你用private或者protected写的构造函数能用new来实例化??
因为是抽象类 它的构造方法就不能直接new 还请详查