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

继承时无法访问受保护的内部类

段干浩荡
2023-03-14
问题内容

通读“用Java思考”,我陷入了《内部类》一章的ex:6。

练习6:(2)在自己的程序包中使用至少一种方法创建一个接口。在单独的程序包中创建一个类。添加一个实现该接口的受保护的内部类。在第三个包中,从您的类继承,并在方法内部,返回受保护的内部类的对象,并在返回期间向上转换到接口。

这是我的代码:

IOne.java

接口

package intfpack;
public interface IOne{
        void    f();
}

COne.java

具有实现接口的受保护内部类的类

package classpack;
import intfpack.*;
public class COne{
        protected class Inner implements IOne{
                public void f(){System.out.println("Inner class of COne");}
        } 
}

CTwo.java

从具有受保护内部类的类继承

package thirdpack;
import classpack.*;
import intfpack.*;

public class CTwo extends COne{
        public IOne getInner(){
                IOne io = new Inner(); 
                return io;
        }
        public static void main(String[] args){
                CTwo ct = new CTwo();
                ct.getInner();
        }
}

Copmiler接下来说:

javac CTwo.java
CTwo.java:9: Inner() has protected access in classpack.COne.Inner
                IOne io = new Inner(); 
                          ^
1 error

但是这本书说我可以在派生类中访问受保护的内部类。错误在哪里?


问题答案:

错误消息抱怨构造函数受到保护,而不是类。但是您尚未在发布的代码中显式定义构造函数。在这种情况下,根据JLS,默认构造函数将受到保护(与类相同)。



 类似资料:
  • 问题内容: 我有两节课。 类具有受保护的方法,是的实例。 Class 与class在同一包中。 我正在尝试访问,但正在获取… 怎么了? 问题答案: 编译器应该捕获这样的错误。当您显然在运行时得到此消息时,发生了一些奇怪的事情。可能您已更改了源代码,但已完全重新编译。 另一个潜在但晦涩的问题是通过不同的类加载器加载类。即使包名称相同,从不同的类加载器加载的类也将位于不同的包中(以与由不同的类加载器加

  • 从quarkus集装箱码头,我可以使用以下命令访问keycloak服务器 返回200状态;但无法访问受保护的资源。 我在这里做错了什么?

  • 问题内容: 有人可以给我解释一下/ 内部 类有什么区别吗? 我知道内部类应尽可能避免(如本文所述)。 但是据我所知,使用或修饰符之间没有区别。 看一下这个例子: … … 所有这些都可以编译,并且无论我声明 还是都有效。 我想念什么?请指出一个使用或有所不同的情况。 谢谢。 问题答案: 该访问修饰符将限制从比在同一个包及其子类之外的其他类的访问。 在所示的示例中,和和将具有相同的效果,因为它们位于同

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 我这里有我的问题的简化版本。A类有一个受保护的方法。类B继承了这个方法。 我现在用Mockito编写一个单元测试,它在另一个包测试中,我想测试方法。为此,我需要模拟getString()调用。由于该方法受到保护,并且我的测试类位于不同的包中,所以我不能使用。问题是,我监视类B。所以我不能使用。 我尝试通过反射获得受保护的方法: 但是我不知道如何在中使用这个。

  • 问题内容: 在下面的代码中,Consumer类可以访问Parent类的受保护方法。由于Parent和Consumer类之间没有关系,这怎么可能。 谢谢 问题答案: 表示:相同的包或通过继承。由于您的课程都在(实际上不建议使用),因此可以进行访问。顺便说一句:如果您尝试测试Java访问控制,则会忘记(= no修饰符= )。 另一方面,访问是指:从该特定类(以及仍然是主机类成员的非静态内部类)之外的任