2016-07-05 2 views
1

я получаю эту ошибку:Выделения без ограждающего экземпляра вызывает исключение

Исключения в потоке «основные» java.lang.Error: Нерешенные проблемы компиляции:

No enclosing instance of type PrimitiveCasting is accessible. Must qualify the allocation with an enclosing instance of type PrimitiveCasting (e.g. x.new A() where x is an instance of PrimitiveCasting). 

No enclosing instance of type PrimitiveCasting is accessible. Must qualify the allocation with an enclosing instance of type PrimitiveCasting (e.g. x.new A() where x is an instance of PrimitiveCasting). 


at casting.PrimitiveCasting.main(PrimitiveCasting.java:22) 

пакета литье;

public class PrimitiveCasting { 
    class anand { 
     int a = 90; 

     void anand1() { 
      System.out.println("anand is having anand1"); 
     } 
    } 

    class babu extends anand { 
     int c, b = 88; 

     void babu1() { 
      System.out.println("babu is having babu1"); 
     } 
    } 

    public static void main(String[] args) { 
     System.out.println("**********"); 
     anand z1= new anand(); 
     z1.anand1(); 

     babu b1= new babu(); 
     b1.anand1(); 
     b1.babu1();`enter code here` 
     System.out.println("********"); 
    } 

} 
+4

Чтобы создать экземпляр 'anhand', ваш внутренний класс должен быть статическим. (то же самое для 'babu'). В противном случае эти классы могут существовать только внутри экземпляра внешнего окружающего класса. – SomeJavaGuy

+0

thankyou sir Я получил решение. но если я не хочу добавлять статику перед внутренним классом, то что мне делать? – Anand

+0

В то же время я хочу добавить значение a и b. Как это сделать сэр? – Anand

ответ

1

Это нормально, в вашем коде вы определяете ваш класс Ананда быть связаны с экземплярами PrimitiveClass, то есть, вы можете иметь экземпляр из класса anand из экземпляра PrimitiveClass. Это то, что мы называем внутренним классом. Для того чтобы ваш код работал, вы можете пометить вас как anand (и babu1), чтобы быть статичным. Вот код:

public class PrimitiveCasting { 
static class anand { 
    int a = 90; 

    void anand1() { 
     System.out.println("anand is having anand1"); 
    } 
} 

static class babu extends anand { 
    int c, b = 88; 

    void babu1() { 
     System.out.println("babu is having babu1"); 
    } 
} 

public static void main(String[] args) { 
    System.out.println("**********"); 
    anand z1= new anand(); 
    z1.anand1(); 

    babu b1= new babu(); 
    b1.anand1(); 
    b1.babu1(); 
    System.out.println("********"); 
} 

}

Или вы можете сделать экземпляр PrimitiveClass, а затем создать экземпляр Ананда или бабу, как это:

public class PrimitiveCasting { 
class anand { 
    int a = 90; 

    void anand1() { 
     System.out.println("anand is having anand1"); 
    } 
} 

class babu extends anand { 
    int c, b = 88; 

    void babu1() { 
     System.out.println("babu is having babu1"); 
    } 
} 

public static void main(String[] args) { 
    System.out.println("**********"); 
    PrimitiveCasting primitiveCasting = new PrimitiveCasting(); 
    anand z1= primitiveCasting.new anand(); 
    z1.anand1(); 

    babu b1= primitiveCasting.new babu(); 
    b1.anand1(); 
    b1.babu1(); 
    System.out.println("********"); 
} 

}

Надежда это Помогите!

0

Вы должны создать экземпляр anand этого способа.

PrimitiveCasting pc = new PrimitiveCasting(); 
anand z1 = pc.new anand(); 

Причина в том, так как ваши ссылается anand из статического контекста должны быть квалифицированы с ограждающим типом экземпляра.

То же самое относится и к другому классу.

0

Вы получаете ошибку, так как ваши внутренние классы не являются статическими переменными-членами, поэтому доступ из статического метода невозможен. Либо сделать эти внутренние классы статичным, как: -

public class PrimitiveCasting { 
static class anand { 
    int a = 90; 

    void anand1() { 
     System.out.println("anand is having anand1"); 
    } 
} 

Или создать экземпляр PrimitiveCasting в основном методе доступ к этим классам: -

PrimitiveCasting pc = new PrimitiveCasting(); 

    anand z1= pc.new anand(); 
    z1.anand1(); 
0

Язык программирования Java позволяет определить класс внутри другого класса , Такой класс называется вложенным классом
Вложенные классы, объявленные как static, называются статическими вложенными классами. Нестатические вложенные классы называются внутренними классами.
Чтобы создать экземпляр внутреннего класса, вы должны сначала создать экземпляр внешнего класса. Затем создайте внутренний объект в пределах внешнего объекта:

OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

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