日期:2014-05-20  浏览次数:20661 次

小鸟的问题。。。
class   A{  
        private   A(){
                System.out.println( "a!!!!! ");
        }
}  

class   AA   extends   A{  
}

public   class   Beetle{
        public   static   void   main(String   b[])   throws   Exception{  
                AA   a   =   new   AA();  
        }
}编译不过。。。
我的想法是A类的构造器是不能被继承的,但AA类应该有个自动生成的构造器。。
可是为什么会出现编译不过呢?

------解决方案--------------------
private A()
这里构造器不能私有
因为你的类能被继承,构造器的访问权限绝对不能低于类的访问权限.否则编译器报错
------解决方案--------------------
private A() 不可以私有的,你想要,他要是只被这个类用,那子类怎么继承呀。嘿嘿。我也是新手。
------解决方案--------------------
构造方法可以是私有的
但这里你要继承A,则A的构造方法不能是私有的
------解决方案--------------------
构造器可以是私有的。因为这样是为了让想生成此类实例的人,不能用构造器来生成实例对象。就是NEW的方法。而你可以写一个生成实例的公开方法,比较getA(),在getA()里生成这个类的实例,反正值类型是A。

但是如果你要让一个类继承A,那个A的构造器的是私有的就不行了。因为你生成一个AA的实例的时候,先要生成A的实例,而这个过程应该是用的A的构造器,而A的构造器是私有的,所以会出错。