如果一个类没有明确的构造方法,那么public类的默认构造 public,友好类的默认构造方法是友好的需要注意的是,如果一个public类定义声明的构造方法中没有public,那么在另外一个类使用该类创建对象时,使用的构造方法就不是public,创建对象就受到一定的限制。上面不是说"public类的默认构造方法是pulic"吗,为什么又说“如果一个public类定义声明的构造方法中没有public,那么在另外一个类使用该类创建对象时,使用的构造方法就不是public,创建对象就受到一定的限制。”?

解决方案 »

  1.   

    那是在有构造函数的情况下,你没在函数前面加PUBLIC
      

  2.   

    public类的默认构造方法是pulic:是说你定义一个public类时,没有明确定义构造器,那么系统回提供一个默认的构造器,该构造器的访问属性是public,如:
    public class DefaultConstructor {
                 int i = 0;
    }
    ------------
    果一个public类定义声明的构造方法中没有public,那么在另外一个类使用该类创建对象时,使用的构造方法就不是public,创建对象就受到一定的限制:是说你定义一个public类时,如果明确定义了该类的构造器,但是没有用public 关键字修饰该构造器,那么该构造器的访问权限是包访问权限,假定这个类类名是“DefineConstructor“;当你在其他包中定义类时,需要创建类“DefineConstructor”的实例,那么就会失败,如下代码:
    //定义类DefineConstructor
    package basic;public class DefineConstructor {
    //构造器没有用public关键字修饰,是默认的包访问权限
                 DefineConstructor(){
                                     System.out.println("oklala");
                                     }
                 }//定义测试类
    package test;public class TestClass{
                 basic.DefineConstructor iobj = new basic.DefineConstructor();
    }这个时候就会报错,没有足够的权限创建这个类的对象
    -------------
    其实,创建一个类的对象就是调用这个类的构造器,构造器的访问权限决定了你什么情况下能创建这个类的对象,比如,一个类的构造器被关键字private修饰,那么你其他的地方永远不可能创建这个类的对象。