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

如果我没有明确声明,那么方法或实例variables的默认访问修饰符是什么?

例如:

package flight.booking; public class FlightLog { private SpecificFlight flight; FlightLog(SpecificFlight flight) { this.flight = flight; } } 

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

从Java 文档

如果一个类没有修饰符(默认,也被称为包私有),它只在它自己的包中可见(包是相关类的命名组 – 你将在后面的课中学习它们)。

member level ,您也可以像使用顶级类一样使用public修饰符或no modifier (package-private),其含义相同。

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

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

从文档:

 Access Levels Modifier Class Package Subclass World ----------------------------------------------------- public YYYY protected YYYN (Default) YYNN private YNNN 

这取决于上下文。

当它在一个类中:

 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-private – 只能从同一个包中看到

这里是一个代码示例,应该为你做几乎总结…除了下面,显示如何不能访问另一个包中的默认值,还有一件事。

如果子类中的子类在另一个包中,则子类中的默认值不可访问,但如果子类位于相同的包中,则该子类是可访问的。

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

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

您的构造函数的访问修饰符将是包私有的(默认) 。 正如你声明这个类是公开的,它在任何地方都是可见的,但构造函数不会。 您的构造函数将只在其包中可见。

 package flight.booking; public class FlightLog // Public access modifier { private SpecificFlight flight; FlightLog(SpecificFlight flight) // Default access modifier { this.flight = flight; } } 

如果不在类中编写任何构造函数,则编译器将使用该类的相同访问修饰符生成一个默认构造函数。 对于下面的例子,编译器将生成一个默认的构造函数,其中的public access修饰符(与class相同)。

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

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

是的,它可以在同一个包中看到。 该包以外的任何内容都将不被允许访问。

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

我认为隐含的你的构造函数访问修饰符将是你的类的访问修饰符。 因为你的类具有公共访问权,构造函数将隐含公共访问

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

不,您不能调用其他软件包的默认访问级别。 但你有包内的访问权限。 点击此链接了解更多详情。

从一本名为OCA Java SE 7程序员I的书

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