Java 成员类访问修饰符

Java 成员类访问修饰符,java,inner-classes,access-modifiers,Java,Inner Classes,Access Modifiers,显然,普通类的默认访问修饰符是包私有的 它对于内部本地类或内部匿名类是私有的 但我不清楚的是,当我们试图从容器类外部查看成员类时,它就像一个私有成员一样 那么它是私有的还是包私有的 除非您另行指定,否则所有内容都具有默认访问权限(即包专用) (在默认情况下所有内容都是公共的接口中除外)所有内容都具有默认访问权限(即包专用),除非您另有指定 (在默认情况下所有内容都是公共的接口中除外)所有内容都具有默认访问权限(即包专用),除非您另有指定 (在默认情况下所有内容都是公共的接口中除外)所有内容都具有

显然,普通类的默认访问修饰符是包私有的 它对于内部本地类或内部匿名类是私有的 但我不清楚的是,当我们试图从容器类外部查看成员类时,它就像一个私有成员一样
那么它是私有的还是包私有的

除非您另行指定,否则所有内容都具有默认访问权限(即包专用)


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

所有内容都具有默认访问权限(即包专用),除非您另有指定


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

所有内容都具有默认访问权限(即包专用),除非您另有指定


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

所有内容都具有默认访问权限(即包专用),除非您另有指定


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

就像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();
    }
}

就像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();
    }
}

就像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();
    }
}

就像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();
    }
}

正如我所知,内部局部类的默认修饰符是私有的,因为它对包含它的块是私有的,就像一个方法一样。你说什么没有意义?你是说局部变量?局部变量不是私有的-它们根本没有访问修饰符,因为它们是本地的。正如我所知,内部局部类的默认修饰符是私有的,因为它对包含它的块是私有的,就像方法一样。你说什么没有意义?你是说局部变量?局部变量不是私有的-它们根本没有访问修饰符,因为它们是本地的。正如我所知,内部局部类的默认修饰符是私有的,因为它对包含它的块是私有的,就像方法一样。你说什么没有意义?你是说局部变量?局部变量不是私有的-它们根本没有访问修饰符,因为它们是本地的。正如我所知,内部局部类的默认修饰符是私有的,因为它对包含它的块是私有的,就像方法一样。你说什么没有意义?你是说局部变量?局部变量不是私有的——它们根本没有访问修饰符,因为它们是局部变量。