两个具有不同访问修饰符的构造函数。有什么用?

时间:2016-06-20 10:03:07

标签: java constructor access-modifiers

使用具有不同访问修饰符的两个构造函数是否有意义。具体用途是什么?对于Eg:

public class Apple {

    int count;

    public Apple()
    {

    }

    private Apple(int count)
    {
        this.count = count;
    }

    public void count()
    {
        System.out.println("Apple count is" + count); 
    }
}

使用构造函数中的任何一个,我们都可以从类右侧访问所有内容

3 个答案:

答案 0 :(得分:2)

不是真的。

例如,在这种情况下,您无法控制Apple实例的count是什么(来自类本身之外的任何地方),因为注入count值的构造函数是{ {1}},private字段本身具有默认访问权限。

答案 1 :(得分:0)

  

具体用途是什么?

Java和许多其他OOP语言一样允许你重载,这不是让你自由地使用不同的参数定义许多方法/构造器,所以你可以以一种非常灵活的方式构造或根据用户输入的内容/用户需要的内容准备对象......

有时它只是在内部调用内部方法,向用户隐藏对象内部的魔法如何工作......

实施例

通过执行类似

的操作来检查用户如何构建Apple
Apple ap = new Apple(1);

但也许用户不需要/想立即传递计数

所以他可以使用

Apple ap2 = new Apple();

诀窍在默认构造函数内部(没有参数的构造函数) 因为你看到构造函数正在调用自己并初始化苹果,但使用count=0;

int count;

public Apple()
{
    this(0);
}

private Apple(int count)
{
    this.count = count;
}

答案 2 :(得分:0)

私有构造函数可以由公共构造函数调用。如果您想在每个构造函数中执行相同的处理,但是不希望仅允许使用该处理进行构造,那么它很有用。通过前:

class Vehicule{

  private Vehicule(String name){
   this.name=name;
  }

  public Vehicule(String name, Motor motor, GazType gazType){
    this(name);
    this.motor=motor;
    this.gazType=gazType;
  }
  public Vehicule(String name,SolarPanel solarPanel){
    this(name);
    this.solarPanel = solarPanel;
  }
 public Vehicule(String name, int numberOfCyclist){
    this(name);
    this.numberOfCyclist=numberOfCyclist;
  }

{

      Vehicule car = new Vehicule("ford", engine, gaz);//OK
      Vehicule tandem = new Vehicule("2wheel2people", 2);//OK
      Vehicule sailboard = new Vehicule("blueWind", blueSail);//OK
      Vehicule madMaxCar = new Vehicule("Interceptor", v8Engine, nitroglicerine);//OK

      Vehicule vehicule=new Vehicule("justeAname")//Compilation Error
    }
    }

您也可以在静态工厂中使用私有构造函数。