2013-11-14 5 views
1

У меня есть два метода в интерфейсе:ограничения метода при реализации интерфейса

public interface MyInterface { 
    public void methodOne(); 
    public void methodTwo(); 
} 

public class MyClass implements MyInterface{  
    public void methodOne(){ 
     //implementation code  
    } 

    public void methodTwo(){ 
     //implementation code  
    } 
} 

Могу ли я ограничить один из них при реализации интерфейса?

+0

Нет, что возможно. Но чего вы хотите достичь? –

+0

Что означает _restrict_? –

+0

Благодарю всех вас за ответы. создание другого > absract класс в порядке, но разве это не может быть обузой? И Ограничением я имею в виду > ограничение пользователя. – user2988092

ответ

0

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

Если вы ограничены, вы хотите предопределить один или несколько методов, то вы можете использовать abstract class вместо interface. Абстрактные методы в abstract class - это методы, которые должны быть реализованы любым классом, который расширяет abstract class. Не абстрактные методы фактически реализованы в самом abstract class.

Например,

public abstract class MyClass 
{ 
    abstract void methodOne(); 

    void methodTwo() 
    { 
     //implementation code 
    } 
} 

public class MyOtherClass extends MyClass 
{  
    void methodOne() 
    { 
     //implementation code  
    } 
} 

Вот ссылка на Abstract Classes and Methods.

EDIT 1 (в ответ на комментарий):
Я не совсем уверен, что вы подразумеваете под бременем. Все, что я говорю, это то, что если вы хотите, чтобы все методы были реализованы классом, используйте интерфейс.

Если вы хотите только некоторые из методов, реализованных в классе, то вы можете использовать абстрактный класс вместо интерфейса

или

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

Оба подхода являются разумными. Это зависит от того, что вам действительно нужно делать.

EDIT 2 (в ответ на дополнительные комментарии):
Предоставление одного класса пользователей с дополнительными функциями, кажется идеальным приложением для всего расширения «нормальный класс пользователей» с классом «супер пользователя», который имеет дополнительный функции. Если вам нужен интерфейс для класса «суперпользователь», вы можете создать интерфейс, расширяющий интерфейс, реализованный классом «обычный пользователь».

+0

Благодарю всех вас за ответы. создание другого > absract класс в порядке, но разве это не может быть обузой? И Ограничением я имею в виду > ограничение пользователя. – user2988092

+0

есть два уровня пользователей. Я хочу ограничить один метод одним из них. но другой пользователь может использовать оба метода. Это возможно? заранее спасибо. – user2988092

+0

Опять же, я не знаю контекста. Если вы просто хотите, чтобы один тип пользователя имел именно то, что у другого есть, но дополнительная функция, тогда это кажется идеальным приложением для простого расширения обычного пользовательского класса с классом «суперпользователя», который имеет дополнительные функции. –

0

Нет, вам нужно реализовать все методы, если ваш класс реализует интерфейс.

Если только не является абстрактным.

Проверьте, пожалуйста, this discussion.

+0

@SotiriosDelimanolis обновил мой ответ. – slider

0

Вы можете использовать abstract class; им не нужно реализовывать весь весь интерфейс. Однако они не могут быть созданы. Вы должны реализовать все методы, чтобы создать экземпляр реализации интерфейса.

0

За исключением класса abstract, вы обязаны использовать все методы интерфейса.

0

Вы не можете ограничить интерфейс, но ДА, вы можете достичь класса Abstract и NO в конкретном классе.

0

Пара решений:

  • Либо пометить класс как abstract. Но в этом случае вы не можете создать экземпляр класса, реализующий.
  • Просто добавьте черную реализацию в свой класс.
0

Не уверен, что вы подразумеваете под "ограничением". Вы должны реализовать этот метод. Однако вы могли бы просто сделать

public void method1(someargs) { 
    throw new UnsupportedOperationException(); 
} 

как делается многими сборниками.

+0

Благодарю всех вас за ответы. создание другого > absract класс в порядке, но разве это не может быть обузой? И Ограничением я имею в виду > ограничение пользователя. – user2988092

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