gpt4 book ai didi

Java内部类和继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:16 25 4
gpt4 key购买 nike

我正在阅读 Thinking In Java,我遇到了一个小问题。我正在做第 8 章的练习 12。

Create an interface with at least one method, in its own package. Create a class in a >separate package. Add a protected inner class that implements the interface. In a third >package, inherit from your class and, inside a method, return an object of the protected >inner class, upcasting to the interface during the return.

所以我创建了这些 .java 文件:

A.java

    package c08;
public interface A
{
void one();
}

Pr2.java

    package c082;
import c08.*;
public class Pr2
{
protected class InPr2 implements A
{
public void one() {System.out.println("Pr2.InPr2.one");}
protected InPr2() {}
}
}

Ex.java

    package c083;
import c082.*;
import c08.*;
class Cl extends Pr2
{
A foo()
{
InPr2 bar=new InPr2();
return bar;
}
}

我的 NetBeans IDE 下划线

    InPr2();

并说:InPr2() 在 C082.Pr2.InPr2 中具有 protected 访问权限,我想知道为什么。如果我没有明确声明 InPr2 中的构造函数应该受到保护,那么它只能在 C082 包中访问,但是当我继承类 Pr2 时,它不应该在类 Cl 中可用,因为 InPr2 是 protected 吗?当我将构造函数更改为公共(public)时,一切都很好。

最佳答案

InPr2 的构造函数是 protected ,这意味着只有继承自 InPr2 的类(不是 Pr2)可以称它为。从 Pr2 继承的类可以看到 Pr2 类,但它们不能调用其 protected 成员,例如 protected 构造函数。

关于Java内部类和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com