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

时间:2013-04-23 08:48:01

标签: java access-modifiers

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

例如:

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

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

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

13 个答案:

答案 0 :(得分:102)

来自Java documentation

  

如果一个类没有修饰符(默认值,也称为包私有),它只在其自己的包中可见(包是相关类的命名组 - 您将在后面的课程中了解它们。)< / p>

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

你可以在这里阅读全文(我最近写的):

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

答案 1 :(得分:78)

来自文档:

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

答案 2 :(得分:30)

这取决于具体情况。

当它在课堂上时:

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
}

答案 3 :(得分:20)

默认访问修饰符是package-private - 仅在同一个包中可见

答案 4 :(得分:10)

这是一个代码示例,它应该为你总结一下......除了以下内容,显示如何在另一个包中访问默认值还有一件事。

如果子类的类在另一个包中,则子类中无法访问默认值,但如果子类位于同一个包中,则可以访问它。

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

答案 5 :(得分:5)

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

答案 6 :(得分:5)

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

答案 7 :(得分:2)

您的构造函数的访问修饰符将是包私有(默认)。正如您已将该类声明为public,它将随处可见,但构造函数不会。您的构造函数只能在其包中显示。

package flight.booking;

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

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

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

package flight.booking;

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

答案 8 :(得分:1)

默认访问修饰符为 package-private (即DEFAULT),并且在同一个包中只显示

答案 9 :(得分:1)

不,您无法调用其他软件包的默认访问级别。但是您可以在包中访问。请点击this link了解详情。

答案 10 :(得分:1)

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

答案 11 :(得分:0)

  

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

我认为你的构造函数访问修饰符将是你的类的访问修饰符。由于您的类具有公共访问权限,因此构造函数将隐式具有公共访问权限

答案 12 :(得分:0)

来自一本名为 OCA Java SE 7程序员的书

  

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