我正在阅读Thinking In Java,我遇到了一个小问题.我正在从第8章开始练习12.
在自己的包中创建一个至少包含一个方法的接口.在>单独的包中创建一个类.添加一个实现接口的受保护内部类.在第三个>包中,继承自您的类,并在方法内部返回protected> inner类的对象,在返回期间向上转换为接口.
所以我创建了这些.java文件:
A.java
package c08;
public interface A
{
void one();
}
Run Code Online (Sandbox Code Playgroud)
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() {}
}
}
Run Code Online (Sandbox Code Playgroud)
Ex.java
package c083;
import c082.*;
import c08.*;
class Cl extends Pr2
{
A foo()
{
InPr2 bar=new InPr2();
return bar;
}
}
Run Code Online (Sandbox Code Playgroud)
我的NetBeans IDE强调了这一点
InPr2();
Run Code Online (Sandbox Code Playgroud)
并说:InPr2()在C082.Pr2.InPr2中有受保护的访问权限,我想知道为什么.如果我没有明确声明InPr2中的构造函数应该受到保护,它只能在C082包中访问,但是当我继承类Pr2时,它不能在类Cl中可用,因为InPr2受到保护吗?当我将构造函数更改为public时,一切都很好.
它应该像你拥有的那样工作得很好,除了将 更改protected InPr2() {}为public InPr2() { }. 换句话说,“任何人都可以实例化这个类,只要他们一开始就能看到这个类。”
| 归档时间: |
|
| 查看次数: |
5830 次 |
| 最近记录: |