Java的外部类为什么不能使用private、protected进行修饰

对于顶级类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。

如果类使用了private修饰符,说明是个内部类。内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。当一个内部类使用了private修饰后,只能在该类的外部类内部使用。

上面这些都是平时使用司空见惯的,但是为什么是这种情况呢?

可以想一下,一个java项目是不可能在一个class里面完成的。mvc模式中,是把类分为三层,一层层调用类。如果定义为私有的和受保护的就无法调用。换句话说,对于一个java文件,要么就是自己单独运行,要么就是被其他程序作为库调用,如果一个java文件的类被private修饰,那么是不是其他的程序或是类是无法使用它的,那么他作为一个单独的文件就没啥用了。如果它作为单个文件运行,类加载怎么找到它呢,因为它对外不可见。同时,也失去了类的存在意义。因此,类只有public和默认修饰符。

原文地址:https://www.cnblogs.com/langren1992/p/9539641.html

时间: 2024-08-30 09:24:46

Java的外部类为什么不能使用private、protected进行修饰的相关文章

解析Visual C# 7.2中的private protected访问修饰符

去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private protected访问修饰符(Access Modifier).至此,C#语言的访问修饰符有以下几种: private protected public internal internal protected private protected 既然有了private和protected,那么privat

震惊!外部类可以访问内部类private变量

在讲Singleton时我举例时用过这样一段代码: public class SingletonDemo { private static class SingletonHolder{ private static SingletonDemo instance=new SingletonDemo(); } private SingletonDemo(){ System.out.println("Singleton has loaded"); } public static Single

Java的外部类和内部类+静态变量和非静态变量的组合关系

看的李刚<疯狂java讲义>,里面讲内部类的地方感觉有点散而且不全,看完之后还是不十分清楚到底怎么用,于是自己写了个程序测试了一下.看如下代码,即可知道外部类和内部类+静态成员和非静态成员之间的相互调用规则. 运行结果如下: 总结如下: 注意: 当如下出现报错:“无法从静态上下文中引用非静态时”,问题在于非静态方法或者非静态变量所属的类可能没有被实列化.因为要使用非静态方法,必须实例化它所属的类. 例如:将第40行代码改成inter2.StaticInter(); 编译: 原因是StaticI

Java调用外部类定义的方法(Static与无Static两种)

首先定义方法 1 public class Dy { 2 public int Add(int x,int y){ //定义Add(),该方法没有被static修饰 3 return x+y; 4 } 5 public static int Sub(int x,int y){//定义Sub(),该方法被static修饰 6 return x-y; 7 } 8 } 调用方法 1 public class Test { 2 public static void main(String[] args)

[译]C# 7系列,Part 5: private protected 访问修饰符

原文:https://blogs.msdn.microsoft.com/mazhou/2017/10/05/c-7-series-part-5-private-protected/ C#有几个可访问性修饰符,public.internal.internal protected和private. public: 具有此可访问性声明的成员可以在此成员所在程序集中或引用该成员所在程序集的任何其他程序集中可见.也就是说,访问不受限制. internal:具有此可访问性声明的成员可以在此成员所在程序集中可

关于public private protected访问修饰符

这个似乎都是老生常谈了,特别是找工作第一轮笔试的时候很爱考这些,再罗列一次,特别要注意继承的情况:     默认状态:即是不加修饰符的时候,所谓的default状态,在类内部可以被访问,在相同的包下面的类也可以互相被使用,跨包则不可访问.     public:这个当然是访问权限最宽的时候了,不仅可以在类内部进行访问,也可以在同一包中进行访问,还可以跨包来进行访问.     private:被private修饰符修饰的属性与方法只能在该类的内部进行使用,在同一个包下的不同类也不能被互相访问,子类

简述public private protected internal修饰符的访问权限

public 关键字是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. protected 关键字是一个成员访问修饰符.受保护成员在它的类中可访问并且可由派生类访问.有关 protected 与其他访问修饰符的比较,仅当访问通过派生类类型发生时,基类的受保护成员在派生类中才是可访问的. internal 关键字是类型和类型成员的访问修饰符.只有在同一程序集的文件中,内部类型或成员才是可访问的. private 关键字是一个成员访问修饰符.私有访问是允许的最低访问

java 第44节 引用外部类的对象

2016-06-30 package com.java1995; /** * 1.引用外部类的对象 * Inner: this.count * Outer:Outer.this.count * @author Administrator * */ //外部类 public class Outer { private int count =1 ; //内部类 class Inner{ private int count = 2; //内部类的方法 public void print(int cou

java 基础之内部类

内部类的使用 1内部类对象的创建: 非静态内部类:Outer.Inner oi  = new Outer().new Inner(); 静态内部类:Outer.Inner oi  = new Outer().Inner(); 2内部类的方法调用 非静态内部类和静态内部类的非静态方法:oi.test(); 静态内部类的静态方法:Inner.test(); public class Test { public static void main(String[] args) { new Test().