2014-12-19 3 views
0

У меня есть этот класс:Есть ли способ предотвратить создание анонимных (внутренних) классов, но разрешить наследование класса?

public class MainClass { 
    ... 
} 

Этот класс должен быть расширен другим классом, чтобы наследовать это attirubtes и методы. Так что это должно быть разрешено:

public class ChildrenClass extends MainClass { 
    ... 
} 

Но я не хочу еще разработчикам создавать внутренние классы (анонимные классы) от моего MainClass, как это:

MainClass anonymousClassInstance = new MainClass(){...} 

Есть ли способ сделать это в java?

+2

Возможно, нет - можете ли вы дать больше информации о том, почему вы хотите предотвратить создание анонимного класса? – assylias

+3

Зачем вам это нужно? С технической точки зрения (JVM) нет разницы между двумя классами (за исключением класса * names *) –

+0

Создание метода 'final' в MainClass может предотвратить переопределение, если это то, чего вы пытаетесь избежать. –

ответ

1

Если все подклассы находятся в одном пакете, вы можете сделать приватный пакет MainClass, чтобы он не расширялся ни одним классом в других пакетах.

package mainPackage; 

class MainClass { // note the missing public modifier 

} 

Подкласс в одном пакете:

package mainPackage; 

public class SubClass extends MainClass { // this extension works 

} 

Расширение в другом пакете:

package externalPackage; 

import mainPackage.MainClass; 

public class SomeClass { 

    public void foo() { 
     MainClass foo = new MainClass() { 
     // doesn't work because `MainClass` is not visible 
     }; 
    } 

} 

Проблема с этим, что MainClass не видно вообще в других пакетах. В приведенном выше примере оператор импорта и объявление переменной тоже не работают. Это может быть решение для вашего особого случая.

+0

Это именно то, что мне нужно. Как вы сказали, может быть, у меня будут проблемы в будущем из-за отсутствия видимости, вероятно, в тестовых случаях, на которые я верю, но для этого я всегда могу использовать отражение, чтобы получить ссылку на класс. Благодаря! –

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