2010-07-29 2 views
0

Я пытаюсь использовать extends (inheritance) в Java. Я сделал быстрый абстрактный класс, чтобы продлить его, а затем расширил. Однако моя IDE сейчас говорит, что «требуется экземпляр, содержащий абстрактный абстрактный_класс», и дает мой конструктор для больших строк ошибок производных классов. О чем это происходит? Абстрактному классу не нужен или нужен какой-либо конструктор.Использование расширений в Java дает вложение ошибки экземпляра

Просто для справки, я использую extends, а не компоненты, потому что детали реализации, которые я не хочу поддерживать для каждого производного класса, которые идентичны, включают использование этого отражения.

Редактировать: Я читал некоторые ответы. Что именуется Богом как статический (или нестатический, если на то пошло) класс? И просто чтобы раздражать всех вас, это не решило проблему.

// some_class.java 
public class some_class { 
    public static abstract class abstract_class { 
     ... 
    } 
    ... 
} 

// Model.java 
public class Model extends some_class.abstract_class { 
    public Model(...) { 
     // No enclosing instance! Critical error. 
     ... 
    } 
    ... 
} 

И я думал, что файлы заголовков C++ были плохими.

+1

Можем ли мы увидеть код, пожалуйста? – PaulJWilliams

+0

У вас нет классов внутри других классов! (все же :)) –

ответ

2

Код, который вы отправили, как представляется, подходит для меня просто отлично. Попробуйте сделать чистую сборку в среде IDE, и она должна работать.

Только для вашего собственного любопытства Java имеет 2 типа внутренних классов: static и обычный или (non-static). Если вы не указали ключевое слово static для определения внутреннего класса, это означает, что экземпляр этого класса всегда будет иметь экземпляр родительского класса. Для экс:

public class MyClassOuter { 
    //... 
    public class MyClassInner { 
     //.. 
    } 
} 

Если вы пишете, что, следует понимать, что любой экземпляр MyClassInner будет иметь неявную ссылку на экземпляр MyClassOuter.

Static, с другой стороны, рука не подразумевает ничего подобного. Это просто определение класса, которое находится внутри другого определения класса. Внешний класс используется почти как пакет (хотя и не совсем).

0

Сообщение о закрытии экземпляра почти наверняка подразумевает, что у вас есть (нестатический) внутренний класс для вашего суперкласса. В большинстве случаев внутренние классы могут и должны быть статичными - это, вероятно, лучший способ обхода проблемы. В качестве альтернативы, как говорится в сообщении, вам нужно будет использовать закрытый экземпляр «внешнего» класса, если ваш родитель действительно имеет смысл как нестатический внутренний класс.

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

0

Вам нужно, чтобы в вашем классе child добавили конструктор super(), который может быть создан суперклассом.

2

, если у вас есть

interface MyInterface 
{ 

    abstract class MyAbstractClass { 
    // ... 
    } 
} 

, а затем вы пытаетесь

class ConcreteClass extends MyAbstractClass { 

} 

Вы получите сообщение об ошибке описаны. Исправление состоит в том, чтобы либо переместить MyAbstractClass в класс верхнего уровня (поместить его в собственный файл - не обязательно для непубличных классов, но и поддерживать код.) Альтернативно добавьте модификатор static в объявление MyAbstractClass.

0

класса А {

. 
. 
. 


class B{ 
     . . .  
} 

}

, если вы хотите получить доступ к Class B, и это не статический внутренний класс вы можете написать код как

AB objOfB = Новый А(). новый B();

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

  • Нет связанных вопросов^_^