Почему интерфейс java.io.Serializable объявляется абстрактным? [Дубликат]

Gson легко учиться и реализовывать, что нам нужно знать, следуют двум методам

  • toJson () - Преобразование Java-объекта в формат JSON
  • fromJson () - преобразовать JSON в объект Java

`

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {

    Gson gson = new Gson();

    try {

        BufferedReader br = new BufferedReader(
            new FileReader("c:\\file.json"));

        //convert the json string back to object
        DataObject obj = gson.fromJson(br, DataObject.class);

        System.out.println(obj);

    } catch (IOException e) {
        e.printStackTrace();
    }

    }
}

`

186
задан Kevin Panko 9 July 2014 в 19:36
поделиться

8 ответов

424
ответ дан aioobe 26 August 2018 в 10:08
поделиться

Это необязательно. Это причуда языка.

2
ответ дан Bohemian 26 August 2018 в 10:08
поделиться
6
ответ дан Buhake Sindi 26 August 2018 в 10:08
поделиться

Абстрактный интерфейс не такой избыточный, как кажется, по-видимому, теоретически.

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

Пример:

public abstract interface MyBaseInterface {
    public String getName();
}

public interface MyBoat extends MyBaseInterface {
    public String getMastSize();
}

public interface MyDog extends MyBaseInterface {
    public long tinsOfFoodPerDay();
}

Вы не хотите, чтобы класс реализовал MyBaseInterface, только два других, MMyDog и MyBoat, но оба интерфейса совместно используют интерфейс MyBaseInterface, поэтому имеют свойство «name».

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

В этом случае это действительно «маркер», чтобы сигнализировать разработчикам интерфейса, которые он не предназначен для самостоятельной реализации. Я должен указать на компилятор (по крайней мере, на солнце / ora 1.6, с которым я его пробовал) компилирует класс, реализующий абстрактный интерфейс.

-3
ответ дан Eurospoofer 26 August 2018 в 10:08
поделиться

Каждый интерфейс неявно абстрактный. Этот модификатор устарел и не должен использоваться в новых программах.

[Спецификация языка Java - 9.1.1.1 abstract Интерфейсы]

Также обратите внимание, что методы элемента интерфейса неявно public abstract. [Спецификация языка Java - 9.2 членов интерфейса]

Почему эти модификаторы неявны? Нет другого модификатора (даже не «модификатор no » - модификатор], который был бы здесь полезен, поэтому вам явно не нужно вводить его.

3
ответ дан kapex 26 August 2018 в 10:08
поделиться
35
ответ дан Lukas Eder 26 August 2018 в 10:08
поделиться

Нет необходимости объявлять абстрактный абзац интерфейса.

Точно так же, как объявление всех этих методов public (которые они уже есть, если интерфейс является общедоступным) или абстрактные (которые они уже находятся в интерфейсе),

Никто вас не останавливает.

Другие вещи, которые вы можете явно указать, но не нужно:

  • call super () в первой строке конструктора
  • extends Object
  • реализовать наследуемые интерфейсы

Существуют ли другие правила, которые применяются с абстрактный интерфейс?

Интерфейс уже «абстрактный». Повторное применение этого ключевого слова совершенно не имеет значения.

12
ответ дан Thilo 26 August 2018 в 10:08
поделиться

Хорошо «Абстрактный интерфейс» - это лексическая конструкция: http://en.wikipedia.org/wiki/Lexical_analysis .

Требуется компилятором, вы можете также напишите interface.

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

Суть `интерфейса заключается в том, чтобы захватить некоторое абстрактное понятие (идея / мысль / мышление более высокого порядка и т. д.), реализация которых может варьироваться ... то есть может быть многократная реализация.

Интерфейс - это чистый абстрактный тип данных, который представляет функции объекта, который он захватывает или представляет.

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

Если ваш конкретный класс не реализует все функции, он снова становится абстрактным, потому что у вас есть реализация вашей мысли или идеи или абстрактности, но он не является полным, вы указываете его классом abstract.

Конкретный класс будет классом / множеством классов, который полностью захватит абстрактность, которую вы пытаетесь захватить в класс XYZ.

Итак, шаблон

Interface--->Abstract class/Abstract classes(depends)-->Concrete class
-3
ответ дан user207421 26 August 2018 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: