2013-09-09 4 views
4

Я написал эту программу интерфейса Java в Eclipse, но есть красная линия под MyTriangle tmp = new MyTriangle(); и когда я запустить программу, я получаю эту ошибку:Нет доступного экземпляра типа

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

public static void main(String[] args) 
    { 
    MyTriangle tmp = new MyTriangle(); 
    tmp.getSides(); 
    System.out.println(); 
    System.out.println("The area of the triangle is " + tmp.computeArea()); 
    } 

interface Triangle 
{ 
public void triangle(); 
public void iniTriangle(int side1, int side2, int side3); 
public void setSides(int side1, int side2, int side3); 
public void getSides(); 
public String typeOfTriangle(); 
public double computeArea();    
} 

class MyTriangle implements Triangle 
{ 
    private int side1,side2,side3; 
    public void triangle() 
    { 
    this.side1 = 3; 
    this.side2 = 4; 
    this.side3 = 5; 
    } 
} 
+0

Это не вся ваша программа, и я подозреваю, что все это содержится внутри одного файла и класса с именем 'Question1', правильно? – chrylis

+0

Вы определяете множество методов в своем интерфейсе, которые вы не реализуете в подклассе. – Kon

+0

Это не вся моя программа. и правильно! все в Question1.java – user1896464

ответ

8

Попробуйте это. Убраны методы для простоты

public class Test1 {  

    public static void main(String [] args) 
    { 
     MyTriangle h1 = new MyTriangle();  
    } 
} 
class MyTriangle implements Triangle{ 
    int side1; 
    int side2; 
    int side3; 

    public MyTriangle(){ 
     this.side1 = 1; 
     this.side2 = 2; 
     this.side3 = 3; 
    } 
} 
interface Triangle{} 

Вы не вставили свой полный код, я полагаю, ваш код должен выглядеть примерно так, как показано ниже.

Затем вы должны создать экземпляр для вашего основного класса до создания экземпляра для вашего треугольника, как показано ниже

public class Test{ 
    class MyTriangle 
    { 
     int side1,side2,side3; 
     public MyTriangle() 
     { 
     this.side1 = 3; 
     this.side2 = 4; 
     this.side3 = 5; 
     } 

    } 
public static void main(String[] args) 
    { 
    MyTriangle h1 = new Test(). new MyTriangle(); // Fix is here** 
    } 
} 

interface Triangle{} 
+0

Большое спасибо. Это все, что мне нужно: MyTriangle tmp = new Question1(). New MyTriangle(); – user1896464

14

MyTriangle не является статическим внутренним классом. Это означает, что все остальные члены экземпляра (& это экземпляр) принадлежит экземпляру внешнего класса, а не самому классу. Не забывайте принадлежать к классу, вещи должны быть определены как static.

Следовательно, вам необходимо предоставить экземпляр внешнего класса для создания экземпляра внутренних один, как

new OuterClass().new MyTriangle(); 

Если вы отметите внутренний класс static, что делает его вложенной это позволит вам обращаться к нему в статический контекст, такой как общедоступный статический метод main().