我可以在java程序的不同级别使用相同的类名吗?
在上面的代码中,我们使用公共类战斗10和类战斗10在类战斗101中,是否公共类战斗10与类战斗10冲突? 若否,原因为何?我可以在java程序的不同级别使用相同的类名吗?,java,Java,在上面的代码中,我们使用公共类战斗10和类战斗10在类战斗101中,是否公共类战斗10与类战斗10冲突? 若否,原因为何? 请给我你的答案,我是java新手是的,在不同的级别你可以使用相同的类名,但这是不可取的。这样做不是一个好的编程实践,因为我认为这会降低代码的可读性,并且在调试时也很难通过。但是不能将内部类命名为与外部类相同的名称 在您的情况下,不会发生冲突,因为编译器会以不同的方式对待它们。我认为这是因为Java动态地将Java类加载到JVM中。因此,在加载外部类时不会加载内部类 我读了另
请给我你的答案,我是java新手是的,在不同的级别你可以使用相同的类名,但这是不可取的。这样做不是一个好的编程实践,因为我认为这会降低代码的可读性,并且在调试时也很难通过。但是不能将内部类命名为与外部类相同的名称 在您的情况下,不会发生冲突,因为编译器会以不同的方式对待它们。我认为这是因为Java动态地将Java类加载到JVM中。因此,在加载外部类时不会加载内部类 我读了另一个问题,其中有一些很好的信息。
请参阅您必须将语法重新编写为
newbattle101().newbattle10()代码>使其可编译
当您实例化new battle10()时,编译器不知道要实例化哪一个。这是因为通过扩展“battle101”,将“内部battle10()”封装在“公共battle10”中
考虑让内部阶级斗争10变得像私人一样
public class battle10 extends battle101
{
public static void main(String a[])
{
battle10 obj=new battle10();
}
}
class battle101
{
class battle10
{
public void life()
{
System.out.println("I love Mango");
}
}
}
现在,编译器可以区分内部battle10和公共battle10,并且您的代码可以编译
希望这能带来一些清晰…:-) 来具体回答您的问题
Java打包非常简单。获得名称空间冲突的唯一方法是在同一个包中有两个同名的类
class battle101 {
private class battle10 {
public void life() {
System.out.println("I love Mango");
}
}
}
battle 101中的battle 10具有名称空间:
com.game.battles.Battle101.Battle10
外面的战场
com.game.battles.Battle10
如果在同一代码块中引用了这两个类,那么声明完全限定路径将使您能够获取正确的路径,而不管名称如何
package com.game.battles
public class Battle10{
}
package com.game.battles.behavior
public class Battle10{
}
package com.game.battles
public class Battle101 extends com.game.battles.Battle10{
public static class Battle10{
}
}
在我们的例子中,我们有3个10类。其中一个是内部的,两个在不同的包中
这些都没有命名空间冲突。。。但在使用时需要完全合格
我建议重新构造代码以避免名称空间混乱
作为旁注:这很麻烦,但也是可能的。强烈建议不要让代码看起来像这样。当您尝试运行代码时,会发生什么?为什么你要费尽心机去编写代码,然后在运行它之前就停止了呢。您的程序应该运行,但是类加载器将确定哪个获取首选项。我猜,内部类battle10(属于battle101)将首先加载。是的,您可以,但这是一个坏主意,原因很明显。@jcd否,这与类加载器无关。为什么类加载器在编译时优先选择内部类battle10而不是公共类battle10。
com.game.battles.Battle10 battle10 = new com.game.battles.Battle10()
com.games.battle.Battle101.Battle10 innerBattle = new com.games.battles.Battle101.Battle10()