请问,请告诉我1)为什么可以将构造函数指定为包公开类的公共?例如:
class TestModifiers {
public TestModifiers() {
}
}
Run Code Online (Sandbox Code Playgroud)
此类不能在任何地方实例化,而是在同一个包中.那么对于构造函数使用包可见修饰符是不够的呢?对于这样的类中的任何方法(公共)也是如此(包可见)
2)说,在内部类中我创建了两个私有变量.为什么我能从外层看到他们?不是很奇怪吗?例如:
class A {
A(){}
class B {
private int b1;
private int b2;
}
public static void main(String[] args) {
new B().b1 = 1;
new B().b2 = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
在具有公共构造函数的非公共类中没有任何值,因为正如您所说,该类在该范围之外是不可访问的.它将编译 - 这就是事情的方式 - 但许多代码分析工具将生成警告.
有是在具有公共方法的非公共类值,如果类扩展或实现公共类或接口,由于派生类可以站在基类或接口类型:
package mypackage;
class MyRunnable implements Runnable {
private final String message;
MyRunnable(String message) {
this.message = message;
}
@Override
public void run() {
System.out.println(this.message);
}
}
public class Surprises {
public static Runnable getSurprise() {
return new MyRunnable("boo!");
}
}
Run Code Online (Sandbox Code Playgroud)
mypackage然后,代码可以获取一个MyRunnable实例(作为a Runnable)并调用公共方法:
Runnable r = Surprises.getSurprise();
r.run();
Run Code Online (Sandbox Code Playgroud)
我会忽略你的第二个问题,因为它在评论的其他地方得到了回答.
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |