Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象类构造函数访问修饰符_Java - Fatal编程技术网

Java 抽象类构造函数访问修饰符

Java 抽象类构造函数访问修饰符,java,Java,抽象类只能用作基类,而基类是由其他类扩展的,对吗?抽象类的构造函数可以具有常用的访问修饰符(public、protected和private(供内部使用))。既然抽象类型似乎表明从技术上讲,公共构造函数的行为将受到很大的保护,那么protected和public中哪一个是正确的访问修饰符?我应该在我的所有构造函数上使用protected吗?如果这种行为是真的,我不确定它是真的,那么您应该始终使用应用程序可用的最受限制的作用域来运行。因此,在这种情况下,我建议使用受保护的 因为抽象类型似乎表明,从

抽象类只能用作基类,而基类是由其他类扩展的,对吗?抽象类的构造函数可以具有常用的访问修饰符(public、protected和private(供内部使用))。既然抽象类型似乎表明从技术上讲,公共构造函数的行为将受到很大的保护,那么
protected
public
中哪一个是正确的访问修饰符?我应该在我的所有构造函数上使用protected吗?

如果这种行为是真的,我不确定它是真的,那么您应该始终使用应用程序可用的最受限制的作用域来运行。因此,在这种情况下,我建议使用受保护的

因为抽象类型似乎表明,从技术上讲,公共构造函数的行为将受到很大的保护

这是不对的。抽象类不能通过调用其构造函数直接建立,但是,任何具体实现都将继承抽象类的方法和可见性

因此抽象类当然可以有公共构造函数

实际上,抽象类的构造函数只能从实现的构造函数调用,所以它是公共的还是受保护的没有区别。例如:

public class Scratch
{
    public static abstract class A
    {
        public A( int i ) {}
    }

    public static class B extends A
    {
        private B() { super(0); };
    }
}
因为抽象类型似乎表明,从技术上讲,公共构造函数的行为将受到很大的保护

嗯。。。对于抽象类,此构造函数作用域[public或protected]没有太大区别,因为不允许实例化[即使是public]。因为它是由子类调用的,所以它可以无缝地调用public或protected构造函数


使用什么完全取决于选择。我通常更喜欢public,因为在大多数情况下都是这样。

至少,抽象类应该有一个受保护的构造函数。这不是严格必要的,因为无论如何都不可能使用构造函数,但它使合同明确


另一个选项是使构造函数私有。不过,如果类的所有实现都是私有的内部类,这才是一个好主意。一个罕见但有用的例子

我相信修饰符是被切换的——在这种结构中,B不能从外部被调用,也不支持这个论点。尽管Intellij的批评者抱怨访问私有成员,但交换它们确实有效。我的想法是表明a的构造函数与其子类之外的所有代码无关。这也许不是最好的例子:)重要的是抽象类的构造函数可以是受保护的,也可以是公共的,但是它总是从子类调用的,所以没有什么真正的区别。您忘记了包私有。它可以确保仅在该包中创建子类。请注意,受保护的构造函数也可以用于临时实例化。“临时实例化”?