首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么内部类和外部类不能具有相同的名称?

内部类和外部类不能具有相同的名称是因为它们在编译器中的命名空间是不同的。在Java中,每个类都有自己的命名空间,类的名称必须在其命名空间中是唯一的。

内部类是定义在另一个类内部的类,它可以访问外部类的成员变量和方法。由于内部类是外部类的一部分,所以它们共享相同的命名空间。如果内部类和外部类具有相同的名称,编译器将无法区分它们,会导致命名冲突。

例如,如果一个外部类和一个内部类都命名为"Example",那么在代码中引用"Example"时,编译器无法确定是指外部类还是内部类。这将导致编译错误。

为了避免这种命名冲突,内部类的命名通常会在外部类的名称后面添加一个后缀,以示区分。例如,可以将内部类命名为"ExampleInner",这样就能明确地区分内部类和外部类。

总结起来,内部类和外部类不能具有相同的名称是为了避免命名冲突,保证编译器能够正确地识别它们。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

静态内部类和内部类的区别_内部类不能定义为抽象类

今天稍微复习一下 静态内部类和 内部类的相关知识,平常很少用 静态内部类 静态内部类,不能访问外部类的非静态成员 静态内部类 不需要创建外部类的对象就可访问(外部类名.内部类 比如new MyMain.Person...public void display() { // System.out.println(num);//不能直接访问外部类的非静态成员 // 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法...(外部类名.this.变量名) 可以定义在方法外(可以有访问修饰符)和方法内(不能有访问修饰符,这个就是匿名内部类了) public class TestInner { private static...public static void main(String[] args) { new TestInner().new Person().display(); } } 最后一点小补充 参考静态内部类和非静态内部类的区别中提到的...正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。

34820

将内部类写为static的可以实现和外部类相同的调用方式

将内部类写为static的可以实现和外部类相同的调用方式 public class StaticDispatch { abstract class Human { } class Man extends...StaticDispatch sr = new StaticDispatch(); sr.sayHello(man); sr.sayHello(woman); } } 代码中刻意地定义了两个静态类型相同但实际类型不同的变量...,但虚拟机(准确地说是编译器)在重载时是通过参数的静态类型而不是实际类型作为判定依据的。...并且静态类型是编译期可知的,因此,在编译阶段,Javac编译器会根据参数的静态类型决定使用哪个重载版本,所以选择了sayHello(Human)作为调用目标,并把这个方法的符号引用写到main()方法里的两条...invokevirtual指令的参数中。

39130
  • 关于Java内部类字段和方法不能使用static修饰的原因

    昨天的文章中,遗留了一个问题就是,为什么Java内部类字段和方法不能使用static修饰。...InnerClass { static int i = 100; // compile erro static void f() { } // compile erro } } 上面的内部类的成员变量和方法...原因: 简单的来说,内部类是外部类的实例,与外部类的的成员变量是一样的,每个实例化出来的对象,它的成员变量赋值都是独立的不会相互影响。...所以这就是为什么内部类里面不允许存在静态成员的原因。...内部类其实也可以认为是外部类的一个成员变量,只要是成员变量,各个对象都是不依赖的,静态属性的出现破坏了这一逻辑,所以java语言在语义层面不允许我们那么做,这其实不是技术问题,是一个语言的逻辑和语义问题

    89970

    关于Java内部类字段和方法不能使用static修饰的原因

    昨天的文章中,遗留了一个问题就是,为什么Java内部类字段和方法不能使用static修饰。...InnerClass { static int i = 100; // compile error static void f() { } // compile error } } 上面的内部类的成员变量和方法...原因: 简单的来说,内部类是外部类的实例,与外部类的的成员变量是一样的,每个实例化出来的对象,它的成员变量赋值都是独立的不会相互影响。...所以这就是为什么内部类里面不允许存在静态成员的原因。...内部类其实也可以认为是外部类的一个成员变量,只要是成员变量,各个对象都是不依赖的,静态属性的出现破坏了这一逻辑,所以java语言在语义层面不允许我们那么做,这其实不是技术问题,是一个语言的逻辑和语义问题

    51540

    【Java零基础入门篇】第 ⑤ 期 - 抽象类和接口(二)

    .掌握内部类的定义方法和使用方法; 多 态 多态的体现 多态性,是面向对象中重要的概念,通俗的说,多态是指实现接口的多个类或一个父类的多个子类虽然有相同的方法,但是具有不同的表现方式。...内 部 类 定义:把类定义在另一个类的内部,该类就被称为内部类。...特点:可以使用外部类中所有的成员变量和成员方法(包括private的)。...在外部类外创建一个非静态内部类对象的语法格式如下: 外部类名.内部类名 引用变量名 = new 外部类名() . new 内部类名(); 通过成员内部类来实现多继承 类不支持多继承,可以通过接口实现,...匿名内部类 匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

    9410

    Day 2-Java-imooc-8-封装

    test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响 3、 使用外部类对象来创建内部类对象: 内部类 对象名 = 外部类对象.new 内部类( ); 2、 如果外部类和内部类具有相同的成员变量或方法...静态内部类: 静态内部类是 static 修饰的内部类,这种内部类的特点是: 1、 静态内部类不能直接访问外部类的非静态成员,但可以通过** new 外部类().成员** 的方式访问 2、 如果外部类的静态成员与内部类的成员名称相同...,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员 3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建...内部类 对象名= new 内部类(); 方法内部类: 就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。...注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

    55690

    Java笔记

    1.为什么使用内部类?...; 2.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字,如:Outer.this.name (二).静态内部类:...是 static 修饰的内部类 1.静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2.如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员...; 如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员 3.创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名 = new 内部类(); public...:其作用域仅限于方法内,方法外部无法访问该内部类 (1).局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的 (2)

    24130

    Java学习笔记-全栈-Java基础-06-面向对象中的重点

    直接使用双引号引起来的为字符串常量,被保存在常量池中。 //只要值相同,任意多个引用都指向该常量。 字符串拼接在编译的时候已完成(置于静态区),因此对象“a”+“b”和对象“ab” 相等。...事实上,接口是Java十分神奇的部分,当你逐渐接触框架、设计模式之后,便会感受到接口的魅力。 学会面向接口编程。 10.2 有了接口,为什么还要抽象类? 举个最简单的例子(也是最常见的例子)。...1.内部类只是编译概念,编译成功后便会成为两个不同的类,Outer外部类和Inner内部类编译结束后生成Outer.class和Outer$Inner.class 2.兼具成员和类的性质 3.服务于外部类...4.内可调用外(作为成员,显然可以),外不能直接调用内(作为类,对外部类来说内部类没有new出来) 5.静态和非静态在内部类中不能同时出现(作为成员,要么在栈,要么在method area) 6.静态内部类只具有成员的性质...因此,一个类不能同时被声明为abstract抽象类的和final的类。

    41720

    java学习笔记(基础篇)—内部类

    静态内部类具有以下特点: 1)静态内部类可以直接访问外部类的静态资源。如果静态内部类中的变量名字和外围类的变量名字相同,需要指定访问时的谁的名字。...特点: 1)在内部类中,可以直接访问外部类的所有资源(属性和方法)。 2)成员内部类不能定义静态的资源,只能定义非静态的资源。...特点: 1)局部内部类只能在当前方法中使用。 2)局部内部类和实例内部类一样,不能包含静态成员。...//在外部类内内部类外创建 实例内部类:new Outer().new Inner(); //在外部类外创建; this.new Inner();...//在外部类内内部类外创建 局部内部类:new Inner(); //只能在方法内部创建 匿名内部类:new 类名()

    58060

    1分钟带你看懂Java内部类

    1.为什么使用内部类使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现, 对于内部类都没有影响 1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题...static 的变量和方法,可以定义常量: (1).因为非静态内部类是要依赖于外部类的实例,而静态变量和方法是不依赖于对象的,仅与类相关。...外部类是不能直接使用内部类的成员和方法的,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法; 2.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量...成员 的方式访问 2.如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员; 如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员...: 其作用域仅限于方法内,方法外部无法访问该内部类 (1).局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的 (2).

    47220

    Java面向对象问题汇总

    1.5、为什么是单继承而不能多继承呢? 如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。...如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。 1.6、为什么是多实现呢?...2.3、抽象类的意义是什么 把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。 当有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。...3、内部类 3.1、什么是内部类 内部类就是定义在另外一个类里面的类。它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它。但它可直接访问外部类的成员。...内部类作用主要实现功能的隐藏、减少内存开销,提高程序的运行速度。 3.5、为什么内部类调用的局部变量必须是final修饰的?

    38030

    java 封装

    与之对应,包含内部类的类被称为外部类。 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!...,友情提示哦: 1、 外部类是不能直接使用内部类的成员和方法滴 可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。...2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。...如: Java 中的静态内部类 静态内部类是 static 修饰的内部类,这种内部类的特点是: 1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2、...如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员 3、 创建静态内部类的对象时

    41310

    Java 快速入门,学习笔记(一)

    构造方法的名称必须与类名相同,一个类可以定义多个构造方法。 静态成员: Java 中被 static 修饰的成员称为静态成员或类成员。...从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。...所以内部类的成员变量 / 方法名可以和外部类的相同。...如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如上述代码中:a.this。...如果外部类的静态成员与内部类的成员名称相同,可通过 类名.静态成员 访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过 成员名 直接- 调用外部类的静态成员。

    32630

    Java基础7:关于Java类和包的那些事

    本文主要介绍了Java外部类和包的一些基本知识 内部类与匿名内部类的文章将在后面发布。...该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。   2.public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。...4、为什么这个public的类的类名必须和文件名相同   答: 是为了方便虚拟机在相应的路径中找到相应的类所对应的字节码文件。...例如一个类的主函数可以调用另一个类的主函数。不一定会使用public类的主函数。 外部类的访问权限 外部类只能用public和default修饰。 为什么要对外部类或类做修饰呢?...,不能用private和protected //一个外部类的访问权限只有两种,一种是包内可见,一种是包外可见。

    91400

    Java(内部类)

    如果一个事物的内部包含另一个事物,那么这就是一个类的内部包含另一个类; 比如可以比作:"身体和心脏" "汽车和发动机"; 内部类又可以分为: 1、成员内部类 2、局部内部类(匿名内部类) 成员内部类:...成员内部类的定义格式: 修饰符 class 外部类名称{ 修饰符 class 内部类名称{ } } 注意:内用外可以随意使用,外用内,需要内部类的对象; 如下图: 如何使用成员内部类...body=new Body().new Heart(); 局部内部类: 如果一个类是定义在一个方法内部的,那么这就是一个局部内部类; 局部:只有当前所属的方法才能使用他,除了这个方法外面就不能使用;...) / private 3、局部内部类:什么都不能写 匿名内部类: 如果接口的实现类(父类的子类)只需要使用一次, 那么这种情况下就可以省略该类的定义,用匿名内部类; 格式: 接口名称 对象名=new...; 如果希望同一个对象,调用多次的方法,那么必须给对象起个名字; 3、匿名内部类是省略了"实现类/子类名称",但是匿名对象是省略了"对象名称"; 匿名内部类和匿名对象不是一回事; 局部内部类中

    41710

    【Java基本功】很多人经常忽视的Java基础知识点

    该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。   2.public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。...4、为什么这个public的类的类名必须和文件名相同   答: 是为了方便虚拟机在相应的路径中找到相应的类所对应的字节码文件。...例如一个类的主函数可以调用另一个类的主函数。不一定会使用public类的主函数。 外部类的访问权限 外部类只能用public和default修饰。 为什么要对外部类或类做修饰呢?...是包内可见并且子类可见,但是当一个外部类想要继承一个protected修饰的非同包类时,压根找不到这个类,更别提几层了 3.private修饰的外部类,其他任何外部类都无法导入它。...,不能用private和protected //一个外部类的访问权限只有两种,一种是包内可见,一种是包外可见。

    54320

    JAVA 1-6章测试题

    答:通过包可以划分不同的功能类,层次更加明确,可以更好的管理工程。 1>能够区分名称相同的类 2>有助于实施访问权限控制 3>有助于划分和组织Java应用中的各个类 20、递归要注意什么?...1>类是相同属性和方法的封装体,因此类具有封装性; 2>子类可以在继承父类中能够继承的属性和方法的基础上,再增加自己特有的属性和方法,因此类具有继承性; 3>在一个类层次中,定义为父类的对象可被赋值为其任何子类的对象...2>子类方法必须和父类方法具有相同的方法名、参数列表和返回值 3>子类可以定义与父类的类方法同名的类方法,以便在子类中隐藏父类的类方法 4>父类中的类方法不能被子类重写成实例方法,而父类的实例方法也不能被子类隐藏为类方法...为什么? 答:有。 1>方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。 2>方法内部类对象不能使用该内部类所在方法的非final局部变量。...例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。 45、final修饰的方法能不能被继承?

    84930
    领券