首页
学习
活动
专区
工具
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

34420

将内部类写为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指令参数中。

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

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

    88470

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

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

    47740

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

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

    8910

    Day 2-Java-imooc-8-封装

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

    55190

    Java笔记

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

    24030

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

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

    57360

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

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

    41120

    1分钟带你看懂Java内部类

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

    46820

    Java面向对象问题汇总

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

    37430

    java 封装

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

    41010

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

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

    32130

    Java基础7:关于Java类那些事

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

    90400

    Java(内部类

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

    41410

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

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

    53920

    JAVA 1-6章测试题

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

    84630
    领券