Java 中的默认访问修饰符是什么?

如果我没有明确说明方法或实例变量的默认访问修饰符是什么?

例如:

package flight.booking;


public class FlightLog
{
private SpecificFlight flight;


FlightLog(SpecificFlight flight)
{
this.flight = flight;
}
}

此构造函数的访问修饰符是受保护的还是包的?同一个包中的其他类,也就是 flight.booking,可以调用这个构造函数吗?

262367 次浏览

此构造函数的访问修饰符是受保护的还是包的?

我认为构造函数的访问修饰符应该是类的访问修饰符。因为您的类具有公共访问权,所以构造函数将隐式地具有公共访问权

默认访问修饰符是包-私有-只能从同一个包中看到

来自 Java文件

如果一个类没有修饰符(默认值,也称为 package-private) ,那么它只能在它自己的包中可见(包是相关类的命名组)

member level中,您还可以使用 public 修饰符或 no modifier(包-私有) ,就像使用顶级类一样,并且具有相同的含义。

你可以在这里阅读完整的故事(我最近写的) :

Http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html

默认的修饰符是 package。只有同一个包中的代码才能调用这个构造函数。

构造函数的访问修饰符将是 包-私有(默认)。正如您已经声明了类 public 一样,它将在任何地方都可见,但是构造函数不可见。您的构造函数将只在其包中可见。

package flight.booking;


public class FlightLog // Public access modifier
{
private SpecificFlight flight;


FlightLog(SpecificFlight flight) // Default access modifier
{
this.flight = flight;
}
}

当你没有在类中编写任何构造函数时,编译器会生成一个具有相同访问修饰符的缺省构造函数。对于下面的示例,编译器将生成一个带有 公众人士访问修饰符的缺省构造函数(与 class 相同)。

package flight.booking;


public class FlightLog // Public access modifier
{
private SpecificFlight flight;
}

默认的访问修饰符是 私人包裹(即 DEFAULT) ,它可以从同一个包中看到 只有

这取决于具体情况。

当它在一个类中的时候:

class example1 {


int a = 10; // This is package-private (visible within package)


void method1() // This is package-private as well.
{
-----
}
}

当它在界面中时:

interface example2 {


int b = 10; // This is public and static.
void method2(); // This is public and abstract
}

下面是一个代码示例,它应该可以很好地总结这一点... ... 除了下面的代码示例之外,还有一件事可以说明您如何无法访问另一个包中的默认值。

如果子类在另一个包中,则默认在子类中不可访问,但如果子类在同一个包中,则可访问。

package main;


public class ClassA {
private int privateVar;
public int publicVar;
int defaultVar;
}


package main;


public class ClassB {
public static void main(String[] args) {
ClassA a = new ClassA();
int v1 = a.publicVar;   // Works
int v2 = a.defaultVar;  // Works
int v3 = a.privateVar;  // Doesn't work


}
}


package other;


public class ClassC {
public static void main(String[] args) {
ClassA a = new ClassA();
int v1 = a.publicVar;   // Works
int v2 = a.defaultVar;  // Doesn't work
int v3 = a.privateVar;  // Doesn't work
}
}

不,您不能调用另一个包的默认访问级别。但你有包裹里的权限。请按照 这个链接了解更多细节。

默认访问修饰符——如果一个类没有修饰符(默认的,也称为包-私有) ,那么它只能在它自己的包中可见(包是相关类的命名组)。

来自文档:

Access Levels
Modifier        Class    Package    Subclass    World
-----------------------------------------------------
public           Y        Y          Y           Y
protected        Y        Y          Y           N
(Default)        Y        Y          N           N
private          Y        N          N           N

摘自一本名为 Java SE 7程序员 I的书:

不使用任何显式访问权限定义的类的成员 修饰符是用包可访问性定义的(也称为默认 具有包访问权限的成员只能访问 在同一个包中定义的类和接口。

是的,它在同一个包中是可见的。该包之外的任何东西都不允许访问它。