gpt4 book ai didi

Java拼图: modifiers

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:56:38 26 4
gpt4 key购买 nike

你能告诉我吗1) 为什么可以为包可见类分配一个公共(public)的构造函数?例如:

class TestModifiers {
public TestModifiers() {

}
}

这个类不能在任何地方实例化,只能在同一个包中实例化。那么,对构造函数使用包可见修饰符还不够吗?对于此类(包可见)中的任何方法(公共(public))也是如此

2) 例如,在内部类中我创建了两个 private 变量。为什么我可以从外部类看到它们?是不是很奇怪??例如:

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;
}
}

最佳答案

在具有公共(public)构造函数的非公共(public)类中没有值,因为正如您正确指出的那样,该类在该范围之外不可访问。它会编译 - 事情就是这样 - 但许多代码分析工具会生成警告。

在具有公共(public)方法的非公共(public)类中存在值(value)如果类扩展或实现公共(public)类或接口(interface),因为派生类可以代表基类或接口(interface)类型:

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!");
}
}

然后 mypackage 之外的代码可以获得一个 MyRunnable 实例(作为一个 Runnable)并调用公共(public)方法:

Runnable r = Surprises.getSurprise();
r.run();

我会忽略你的第二个问题,因为它已在评论的其他地方得到回答。

关于Java拼图: modifiers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174379/

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