Общий вопрос об интерфейсах - PullRequest
1 голос
/ 09 июня 2011

Я знаю, это глупый вопрос, но кто-то сказал мне, что мы можем написать код в интерфейсе, я имею в виду не логику, а System.out.println (), в интерфейсе ..

Это правда ??

Ответы [ 8 ]

3 голосов
/ 09 июня 2011

Интерфейсы могут иметь только открытые абстрактные методы и открытые статические конечные поля (константы).Они НЕ МОГУТ иметь: конструкторы, статические блоки, блоки, неабстрактные методы, непубличные методы, нестатические конечные поля.Если вы не вводите public static final для полей или public для методов, компилятор добавляет их для вас.

3 голосов
/ 09 июня 2011

Нет, в интерфейсе вы объявляете только методы (имена, параметры)

2 голосов
/ 09 июня 2011

Одна вещь была забыта, интерфейс может иметь статические классы и интерфейсы, такие как;

public interface MyInterface {
      public static class Holder {};
}

EDIT

JLS утверждает, что

Интерфейсы могут содержать тип члена декларации (§8.5). Тип члена объявление в интерфейсе неявно статичный и публичный.

2 голосов
/ 09 июня 2011

Это пример кода, где вы можете напечатать что-то из интерфейса, но это плохая практика , и я не знаю, для чего это нужно, это всего лишь Java-головоломка:

public interface NewClass {

   HashMap x = new HashMap() {{
       System.err.println("print me");         
   }};

}

public class Test implements NewClass{

    public static void main(String[] args) {
        x.clear();
    }
}

(Используемые классы больше не имеют никакого значения)

2 голосов
/ 09 июня 2011
нет

Нет

Интерфейс простой контракт.

Вы можете иметь только public объявление метода и public, static, final поля Ничего другого

0 голосов
/ 09 июня 2011

Да, вы можете:

public interface DoStuff {
    public class Worker {
        public void work() {
            System.out.println("Hi there!");
        }
    }
}

import DoStuff.Worker;

public class Main {

    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.work();
    }
}

Если вы запустите Main, он выдаст «Привет!»

Это очень надуманный пример, но технически это возможно.

0 голосов
/ 09 июня 2011

Интерфейс является чисто абстрактным классом, который имеет только конечные переменные , только абстрактные методы и не имеет конструктора. Таким образом, в интерфейс можно добавить только объявление методов, которое является только абстрактным методом и конечными переменными.

0 голосов
/ 09 июня 2011

Это невозможно в интерфейсах. Либо вы можете объявить реализуемые методы или конечные статические константы. Но определение констант не является хорошей практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...