2012-06-14 2 views
2

Я новичок в Java и стараюсь сделать простую программу, чтобы помочь мне лучше понять объектно-ориентированное программирование.ОШИБКА: Нет доступного экземпляра типа OOPTutorial

Я решил сделать телефонную программу. Однако в строке 5 следующей программы, где я пытаюсь создать экземпляр класса телефона, я получаю следующую ошибку:

«Доступный экземпляр типа OOPTutorial недоступен. Необходимо присвоить выделение с помощью экземпляра окружения типа OOPTutorial (например, x.new A(), где x - это экземпляр OOPTutorial). "

Вот программа:

public class OOPTutorial { 

    public static void main (String[] args){ 

     phone myMobile = new phone();   // <-- here's the error 
     myMobile.powerOn(); 
     myMobile.inputNumber(353851234); 
     myMobile.dial(); 

    } 

    public class phone{ 
     boolean poweredOn = false; 
     int currentDialingNumber; 

     void powerOn(){ 
      poweredOn = true; 
      System.out.println("Hello"); 
     } 
     void powerOff(){ 
      poweredOn = false; 
     System.out.println("Goodbye"); 
     } 
     void inputNumber(int num){ 
     currentDialingNumber = num; 
     } 
     void dial(){ 
      System.out.print("Dialing: " + currentDialingNumber); 
     } 
    } 
} 
+2

[off topic]: вы должны называть свои классы, используя UppercaseStartingCamelCase. То есть ваш «телефон» должен быть «Телефон». –

+0

Возможный дубликат [Нет доступного экземпляра типа Сервер доступен] (http://stackoverflow.com/questions/7901941/no-enclosing-instance-of-type-server-is-accessible) – Raedwald

+0

Возможный дубликат [Java - Нет доступного экземпляра типа Foo] (http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible) – fabian

ответ

3

Это может иметь смысл для вас, если вы новичок в Java, но инстанцировании нестатический внутренний класс (phone) требуется экземпляр класса ограждающей (OOPTutorial).

На простом английском языке, это примерно означает, что вы либо

  1. Может только сделать new phone() внутри OOPTutorial-метод, который не помечен как static или

  2. вам нужно сделать phone волчок (т. е. переместить его за пределы OOPTutorial) или

  3. необходимо сделать внутренний класс phone статическим (по сдача static перед декларированием класса)

+1

Учитывая, что он новичок, вы хотели бы добавить немного больше объяснений? (т. е. внутренний класс имеет неявную ссылку на охватывающий класс, но нет, потому что он вызван из статического метода). –

+0

Спасибо, ребята, теперь я понимаю и программа работает: D –

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