当前位置: 首页 > 面试题库 >

为什么我不能在包外使用受保护的构造函数?[重复]

邹祺
2023-03-14
问题内容

为什么我不能在包外部使用受保护的构造函数来编写这段代码:

package code;
public class Example{
    protected Example(){}
    ...
}

Check.java

package test;
public class Check extends Example {
  void m1() {
     Example ex=new Example(); //compilation error
  }
}
  1. 即使我扩大了班级,为什么仍会收到错误消息?请解释

编辑:

编译错误:

构造函数Example()不可见


问题答案:

protected修饰符仅用于包中以及包外部的子类中。使用对象创建对象时Example ex=new Example();,默认情况下将调用父类的构造函数。

由于父类构造函数受到保护,因此您会遇到编译时错误。您需要根据JSL 6.6.2.2调用受保护的构造函数,如示例2所示。

package Super;

public class SuperConstructorCall {

    protected SuperConstructorCall() {
    }

}

package Child;

import Super.SuperConstructorCall;

public class ChildCall extends SuperConstructorCall
{

    public static void main(String[] args) {

        SuperConstructorCall s = new SuperConstructorCall(); // Compile time error saying SuperConstructorCall() has protected access in SuperConstructorCall
    }
}

符合JLS
6.6.2.2的
示例2

package Super;

    public class SuperConstructorCall {

    protected SuperConstructorCall() {
    }

}

package Child;

import Super.SuperConstructorCall;

public class ChildCall extends SuperConstructorCall
{

    public static void main(String[] args) {

        SuperConstructorCall s = new SuperConstructorCall(){}; // This will work as the access is by an anonymous class instance creation expression 
    }
}


 类似资料:
  • 可能重复:< br >什么是复制省略和返回值优化? 我有以下程序: 我期望的输出如下: 但我得到以下信息: 问题是:为什么不将对象从func返回到main调用我的复制构造函数?

  • 我希望Hibernate能够使用受保护的无参数构造函数实例化类,然而,我们得到了:。 更改自: 致: 问题已经解决了。我们使用的Hibernate版本:3.6.10.final。 对于什么时候无参数构造函数必须是而不是才能使Hibernate工作,是否有任何规则?

  • 问题内容: 整个问题都在标题中。例如: 构造函数是细跟的缺省或修改,但如果考虑到给我一个编译器错误或改性剂。 问题答案: 将枚举视为具有有限数量实例的类。除了最初声明的实例外,再也没有其他实例了。 因此,您不能具有公共或受保护的构造函数,因为那样将允许创建更多实例。 注意:这可能不是官方原因。 但这对我来说最有意义。

  • 根据我的理解,当创建了临时对象时,将调用move构造函数。这里,函数返回一个临时对象,但我的程序没有打印来自移动构造函数的消息:

  • 我在做一个非常简单的两个按钮状态。如果我点击abutton,A组件显示,如果点击bButk,那么B组件。我正在映射通过数组的项目,以便每个项目都有自己的按钮状态。假设我点击项目1的按钮B,那么我只想要第一个项目B显示。现在所有这些都会同时被触发。我已经在构造函数中限制了它们,但我仍然无法只获得一次点击触发并显示相关组件。

  • 问题内容: 我正在解决这个问题,有没有一种方法可以覆盖Java中的类变量? 第36条反对意见是: 如果您看到,请运行。 谁能解释为什么皱眉呢? 问题答案: 这是一个风格上的问题,而不是直接的问题。这表明您没有正确考虑班上正在发生的事情。 考虑一下什么意思: 此变量存在于类级别,在每个实例 中并不单独存在,并且在扩展me的类中没有独立存在 。 考虑一下什么意思: 该变量可以在此类,同一包中的 类以及