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