我们可以在Java中覆盖构造函数,并且构造函数可以是私有的吗?
我很感激对这些问题的解释:
- 我们可以用Java
Override
构造函数吗? -
Constructor
可以是私有的吗?
不,你不能覆盖构造函数。 他们不是遗传的。 但是,每个子类构造函数必须链接到子类中的另一个构造函数或超类中的构造函数。 例如:
public class Superclass { public Superclass(int x) {} public Superclass(String y) {} } public class Subclass extends Superclass { public Subclass() { super(5); // chain to Superclass(int) constructor } }
构造函数不被inheritance的含义是你不能这样做:
// Invalid Subclass x = new Subclass("hello");
至于你的第二个问题,是的,构造函数可以是私有的。 它仍然可以在类或任何封闭类中调用。 这对于单身人士来说很常见:
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() { // Prevent instantiation from the outside world (assuming this isn't // a nested class) } public static Singleton getInstance() { return instance; } }
如果您有一个只有静态方法的实用程序类,那么私有构造函数也可用于阻止任何实例化。
构造函数用于类。 在任何情况下都无法覆盖它。 它想要从宝马的工厂改变法拉利的工厂(这是不切实际的)。 当然,您可以超载以获得所需的function。
是构造函数可以是私有的。 通过将其设为私有,您不会让外界通过构造函数直接创建它的对象,但是单例模式使用公共静态方法来调用类的构造函数,并且可以创建对象。
- 不,我们不能在类外使用构造函数,因为子类将构造函数视为方法..没有返回类型。
- 您可以将它用作私有,但如果类的构造函数是私有的,那么您不能将受尊重的类的obj变为另一个类。
1)不! 构造函数属于声明它的类。 子类是一个不同的类,必须有自己的构造函数。 因此,构造函数根本无法被覆盖。
2)是的,这通常是在单身人士的情况下完成的。
不,我们无法覆盖一个construtor,为了实现Singleton pattren,我们应该有一个私人的construtor。
试试这个: http : //www.javabeginner.com/learn-java/java-constructors 1 – > No 2 – > yes
1)这只是功课问题,还是你试图达成某些目标? 你能用最重要的构造函数展示你试图达到的目的吗?
由于首先调用父构造函数,因此您可以在构造函数中根据需要修改基类。 当然,只要对基本属性的访问不是私有的。 如果你扩展一个类但不喜欢它们的may-be-private属性,那么从它派生是一个错误。
2)构造函数可以是私有的吗?
是的,但你知道它有什么用吗?
-
在派生类中,您可以创建具有相同签名的新构造函数,但这并不是真正重写,因为在初始化类时,父类的构造函数仍然在新类之前调用。
-
类的构造函数可以是私有的或受保护的,当然也可以是公共的。 但如果它受到保护或私密,你会如何开始上课? (实际上你可以在那个类中使用静态函数…)
你可以使用回调:
在父类中:
protected void onCreate(){} SomeClass(){ //Constructor code onCreate() }
在孩子:
@Override protected void onCreate(){ //Child constructor code }
两者都不是真的,因为当一个类inheritance其他类时它会自动调用它的父类,所以我们无法覆盖并使它们成为最终的。
您不能覆盖构造函数,但是您可以将它们设置为任何访问级别修饰符,例如public,private或default。 您可能需要私有构造函数来处理单例或类似于静态方法等的类(即Java的Math类)