什么是Java中的默认访问修饰符? [重复](What is the default acces

2019-08-31 21:15发布

这个问题已经在这里有一个答案:

  • 什么是默认访问修饰符? 12个回答

什么是一个方法,或者如果我没有明确说明它的实例变量的缺省访问修饰符?

例如:

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

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

这是构造保护或包装的访问修饰符? 可以在其他类在同一个包,这是flight.booking ,调用此构造?

Answer 1:

从Java 文档

如果一个类没有修饰符(默认值,也称包私有),只在其自己的包是可见的(包名为相关类的群体 - 你会了解他们在后面的课程。)

member level ,你也可以使用公共改性剂或no modifier (包私营)刚刚与顶级类,并具有相同含义。

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

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



Answer 2:

从技术文档:

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


Answer 3:

这取决于上下文。

当它是一个类中:

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
}


Answer 4:

只能从同一个包可见 - 默认访问修饰符是包私有



Answer 5:

下面是一个代码示例,它应该几乎和这件事对你......除了以下,展示了你不能在其他包访问默认还有一两件事。

默认是没有在子类中,如果访问该子类是在另一个包,但它是可访问的,如果子类是在同一包中的类。

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


Answer 6:

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



Answer 7:

是的,这是在同一个包可见。 该软件包以外的任何东西会不会被允许访问它。



Answer 8:

你的构造函数的访问修饰符是包专用(默认)。 正如你所声明的类公众,这将是随处可见,但构造不会。 构造函数将仅在其包装是可见的。

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


Answer 9:

默认访问修饰符是包私有的 (即默认设置),它是可见的只有来自同一个包。



Answer 10:

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



Answer 11:

不,你不能调用默认的访问级别其他包。 但是,你必须在包内的访问。 按照此链接了解更多详情。



Answer 12:

这是构造保护或包装的访问修饰符?

我觉得你含蓄构造访问修饰符是你的类的访问修饰符。 作为你的类有公共访问,构造函数具有公共访问含蓄



Answer 13:

从命名OCA Java SE 7中编程我的书:

不使用任何明确的访问修饰符定义的类成员与封装辅助功能(也称为默认可访)定义。 与包访问成员是仅在相同的包中定义的类和接口访问。



文章来源: What is the default access modifier in Java? [duplicate]