成员类访问修饰符

Posted

技术标签:

【中文标题】成员类访问修饰符【英文标题】:Member Class access modifier 【发布时间】:2014-01-02 13:19:52 【问题描述】:

很明显,普通类的默认访问修饰符是包私有的 它对于内部 Local 类或内部匿名是私有的 但是当我们试图从容器类外部看到它时,对我来说成员类并不明显,它就像一个私有成员 那么它是私有的还是包私有的?

【问题讨论】:

【参考方案1】:

除非您另外指定,否则所有内容都具有默认访问权限(包私有)。

(除了在默认情况下所有内容都是公共的接口)

【讨论】:

据我所知,内部本地类的默认修饰符是私有的,因为它对包含它的可能块来说是私有的,就像一个方法 你说的没有道理?你的意思是局部变量?局部变量不是私有的——它们根本没有访问修饰符,因为它们是本地的。【参考方案2】:

就像 Tim B 所说的,默认情况下所有东西都是包私有的,除了在接口中。

以下代码段演示了这一点。

public class OuterClass 

    @Override
    public String toString() 
        return "I am the public outer class";
    

    static class StaticInnerClass 
        @Override
        public String toString() 
            return "I am the package private inner class";
        
    

    class NonStaticInnerClass 
        @Override
        public String toString() 
            return "I am the package private non static inner class";
        
    

    public static void main(String[] args) 
        OuterClass oc = new OuterClass();
        OuterClass.StaticInnerClass ic = new OuterClass.StaticInnerClass();
        NonStaticInnerClass nsic = oc.new NonStaticInnerClass();
        System.out.println(oc);
        System.out.println(ic);
        System.out.println(nsic);
        System.out.println(new SecondClass());
    


class SecondClass 
    @Override
    public String toString() 
        OuterClass oc = new OuterClass();
        OuterClass.StaticInnerClass ic = new OuterClass.StaticInnerClass();
        OuterClass.NonStaticInnerClass nsic = oc.new NonStaticInnerClass();
        return oc.toString() + "\n" + ic.toString() + "\n" + nsic.toString();
    

【讨论】:

以上是关于成员类访问修饰符的主要内容,如果未能解决你的问题,请参考以下文章

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

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

成员变量和成员方法的访问控制修饰符都有哪些?

访问修饰符

访问修饰符

java中的类修饰符成员变量修饰符方法修饰符。