什么是一个方法,或者如果我没有明确说明它的实例变量的缺省访问修饰符?
例如:
package flight.booking;
public class FlightLog
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight)
{
this.flight = flight;
}
}
这是构造保护或包装的访问修饰符? 可以在其他类在同一个包,这是flight.booking
,调用此构造?
从Java 文档
如果一个类没有修饰符(默认值,也称包私有),只在其自己的包是可见的(包名为相关类的群体 - 你会了解他们在后面的课程。)
在member level
,你也可以使用公共改性剂或no modifier
(包私营)刚刚与顶级类,并具有相同含义。
完整的故事,你可以在这里阅读( 我最近写的 ):
http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html
从技术文档:
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
这取决于上下文。
当它是一个类中:
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
}
}
默认修饰符是package
。 在同一个包只有代码将能够调用此构造函数。
是的,这是在同一个包可见。 该软件包以外的任何东西会不会被允许访问它。
你的构造函数的访问修饰符是包专用(默认)。 正如你所声明的类公众,这将是随处可见,但构造不会。 构造函数将仅在其包装是可见的。
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight) // Default access modifier
{
this.flight = flight;
}
}
当你没有在你的类写任何构造函数,则编译器生成与类相同的访问修饰符默认构造函数。 在下面的例子中,编译器将生成具有公共访问修饰符(同级)默认构造函数。
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
}
默认访问修饰符是包私有的 (即默认设置),它是可见的只有来自同一个包。
默认访问修饰符 - 如果一个类没有修饰符(默认值,也称包私有),只在其自己的包是可见的(包名为相关类组)。
不,你不能调用默认的访问级别其他包。 但是,你必须在包内的访问。 按照此链接了解更多详情。
这是构造保护或包装的访问修饰符?
我觉得你含蓄构造访问修饰符是你的类的访问修饰符。 作为你的类有公共访问,构造函数具有公共访问含蓄
从命名OCA Java SE 7中编程我的书:
不使用任何明确的访问修饰符定义的类成员与封装辅助功能(也称为默认可访)定义。 与包访问成员是仅在相同的包中定义的类和接口访问。