2013-02-11 4 views
0

Я хочу создать экземпляр класса B, который не является частью внутреннего класса A.Как создать экземпляр с таким же классом имени в java

Как я могу это достичь? Я хотел бы, чтобы имя класса оставалось неизменным для классов B.

public class Sample { 
    public static void main(String[] args) { 
     A a = new A(); 
     a.show(); 
    } 
} 

class A { 
    class B { 
     public void show() { 
      System.out.println("hello"); 
     } 
    } 

    public void show() { 
     B b = new B(); 
     b.show(); 
    } 
} 

class B { 
    public void show() { 
     System.out.println("hellohello"); 
    } 
} 
+0

So _inside_ A Вы хотите создать экземпляр «внешнего» класса B? – 11684

ответ

4

Используйте полное квалифицированное имя класса B, т.е. com.mypackage.mysubpackage.B для наружного B и com.mypackage.mysubpackage.A.B для внутреннего B.

3

Вы можете использовать полностью квалифицированное имя B всегда относятся к нему: packageName.B.

Это не работать, если класс в безымянном пакете (по умолчанию) (то есть, если нет package декларации на вершине своего файла .java). Это еще одна причина не использовать безымянный пакет вообще (т. Е. Все ваши классы должны быть в именованном пакете).

2

Используйте полный идентификатор класса, который вы хотите создать экземпляр (нет инструкции import).

yourPackage.B variable = new yourPackage.B(); 
2

Заменить основной метод на код ниже:

public static void main(String[] args) { 

    A a = new A(); 
    a.show(); 
    //For Outer Class 
    B bOuter =new B(); 
    bOuter.show(); 

    //For Inner Class 
    A.B bInner=new A().new B(); 
    bInner.show(); 
} 
1

Используйте полное квалифицированное имя, чтобы держаться подальше от конфликтов между тем же именем классов. . packageName.A.B и packageName.B

Смежные вопросы