c++类不声明访问修饰符 默认是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++类不声明访问修饰符 默认是啥相关的知识,希望对你有一定的参考价值。

类 class默认为 private
在C++中 struct结构体,默认为public
参考技术A private
结构体默认是pulic本回答被提问者采纳
参考技术B 默认私有成员,private 参考技术C private

Java 构造函数的默认访问修饰符

【中文标题】Java 构造函数的默认访问修饰符【英文标题】:Default access modifier for a Java constructor 【发布时间】:2012-11-12 13:04:36 【问题描述】:

谁能解释一下显式无参数构造函数(和其他构造函数)的默认访问修饰符是什么?

【问题讨论】:

另见,隐式/默认构造函数:What's the access modifier of the default constructor in java? 【参考方案1】:

JLS 8.8.9 默认构造函数

如果类不包含构造函数声明,则自动提供不带参数的默认构造函数:

如果类被声明为public,则默认构造函数被隐式赋予访问修饰符public; 如果该类被声明为受保护,则默认构造函数被隐式赋予访问修饰符protected; 如果该类被声明为私有,则默认构造函数被隐式赋予访问修饰符私有;否则, 默认构造函数具有没有访问修饰符所暗示的默认访问权限。

【讨论】:

OP 专门询问“显式无参数构造函数”,而不是默认构造函数。 @Raedwald:除了参数化构造函数之外,当我们添加无参数构造函数时工作。【参考方案2】:

在这方面,构造函数与方法相同 - 如果您没有明确指定公共、私有或受保护,那么构造函数将获得默认的“包私有”可见性。它可以从同一个类或同一个包中的任何其他类调用,但不能从不同包中的子类调用(因此,如果一个类只有包可见的构造函数,则任何子类都必须在同一个包中)。

私有构造函数可以防止任何其他类实例化这个类,但是你可以在类中拥有一个公共静态工厂方法来调用它自己的私有构造函数。这是单例之类的常见模式。

【讨论】:

【参考方案3】:

-no 访问修饰符被定义 明确。所以这个构造函数将有一个Package Level Access。在该包中定义为具有此默认构造函数的类的类将能够访问它,并且扩展包含默认构造函数的此类的类也将能够通过继承访问它。

- 如果 构造函数private,那么只有 该类中的代码 可以访问它。

单例示例

public class Test 

  private static Test uniqueInstance = new Test();

  private Test()

  public static Test getInstance()

    return uniqueInstance;

 



-即使是非静态inner classes在班级中也可以访问其私人成员,反之亦然。

例如:

public class T 


    private T()

        System.out.println("Hello");
    

    class TT

        public TT()

            new T();
        
    

    public static void main(String[] args)

        T t = new T();
        T.TT i = t.new TT();

    


【讨论】:

【参考方案4】:

这取决于您是为普通类还是枚举编写构造函数:

对于类,答案由JLS §6.6.1给出:

在没有访问修饰符的情况下声明的类成员或构造函数隐式具有访问权限。

对于枚举,答案由JLS §8.9.2给出:

在枚举声明中,没有访问修饰符的构造函数声明是private

(枚举构造函数始终是私有的,以防止其他类实例化更多枚举常量。)

【讨论】:

以上是关于c++类不声明访问修饰符 默认是啥的主要内容,如果未能解决你的问题,请参考以下文章

Java中成员属性默认访问修饰符是啥

Java 构造函数的默认访问修饰符

JAVA中的四种作用域访问修饰符以及各自的关键字个特点是?

在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?

在开发C#程序过程中,如果定义的类不写访问修饰符,则类默认的访问类型是

在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?