使用具有不同访问修饰符的两个构造函数是否有意义。具体用途是什么?对于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);
}
}
使用构造函数中的任何一个,我们都可以从类右侧访问所有内容
答案 0 :(得分:2)
不是真的。
例如,在这种情况下,您无法控制Apple
实例的count
是什么(来自类本身之外的任何地方),因为注入count
值的构造函数是{ {1}},private
字段本身具有默认访问权限。
答案 1 :(得分:0)
具体用途是什么?
Java和许多其他OOP语言一样允许你重载,这不是让你自由地使用不同的参数定义许多方法/构造器,所以你可以以一种非常灵活的方式构造或根据用户输入的内容/用户需要的内容准备对象......
有时它只是在内部调用内部方法,向用户隐藏对象内部的魔法如何工作......
通过执行类似
的操作来检查用户如何构建AppleApple 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
}
}
您也可以在静态工厂中使用私有构造函数。