2013-10-08 14 views
5

Я новичок в Java. В чем разница между абстрактным типом данных и интерфейсом.Абстрактный тип данных и интерфейс

Для примера мы имеем ListADT

interface MyListADT<T> { 
    void add(T var); 
    void add(T var,int pos); 
    void display(); 
    T remove(int pos); 
    void clear(); 
    boolean contains(Object o); 
} 

Где мы определяем АТД как интерфейс. Какова же разница между ADT и интерфейсом Или ADT представляет собой интерфейс

+4

возможно дубликат [Какая разница между интерфейсом и абстрактным классом?] (Http://stackoverflow.com/questions/1913098/what- is-the-difference-between-an-interface-and-abstract-class) –

+2

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

+2

Есть ли разница между абстрактным классом и абстрактными типами данных – user2454830

ответ

-5
What is the difference between Abstract data type and Interface. 
  1. Переменные, объявленные в интерфейсе Java является окончательным по умолчанию. Абстрактный класс может содержать не конечные переменные.
  2. Пользователи интерфейса Java по умолчанию являются общедоступными. Java, абстрактный класс может иметь обычные вкусы членов класса, как частная, защищаемых и т.д .. проверки это link для информации
+0

Я не понимаю ваши ответы ... Итак, ваше обсуждение - это абстрактный тип данных - это интерфейс или у вас есть какой-либо другой ответ. – user2454830

+2

Комбинация данных вместе со своими методами называется абстрактным типом данных (ADT). Интерфейс Java - это способ указать ADT. – user2454830

+1

@ user2454830, когда вы пишете String x = "hi" при этом, мы говорим, что x является переменной типа данных String. DataType означает, какую переменную вы усваиваете. Надеюсь, вы знаете класс, поэтому не объясняете, какой класс – SpringLearner

1

В Java- интерфейса

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

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

следовать за ними ссылку

http://javapapers.com/core-java/abstract-and-interface-core-java-2/difference-between-a-java-interface-and-a-java-abstract-class/

http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface

What is the difference between an interface and abstract class?

+0

Я не получаю четко. Все говорят о различиях между интерфейсом и абстрактным классом. Но вопросы касаются абстрактных типов данных и интерфейсов. Пожалуйста, проверьте его. Или вы все говорите, что интерфейс является абстрактным типом данных или абстрактным классом является абстрактным типом данных. Какой из них правильный. Я не играю здесь. – user2454830

+0

Вопрос о ADT, а не абстрактном классе. Отмечено, что не отвечает на вопросы. – Zimano

5

Сочетание данных вместе с его методами называется абстрактный тип данных (ADT).

Интерфейс Java - это способ указать (но не реализовать) ADT.

Указывает имена, параметры и типы возвращаемых данных (то есть заголовок) методов ADT.

Интерфейс не определяет поля данных (кроме общедоступных констант), так как это деталь реализации.

Интерфейс Java определяет требования ADT в качестве контракта между поставщиком услуг (классом, который реализует ADT) и клиентом (пользователем класса).

+1

Наконец, вы говорите, что ADT - это интерфейс справа. – Sankar

+1

. Есть несколько лишних символов, которые я вижу в тексте после каждого слова. Вы можете это исправить? – Flexo

-1

Комбинация данных со своими методами называется абстрактным типом данных (ADT).

Интерфейс Java - это способ указать ADT.

Вы можете объявить класс абстрактным, если он содержит ноль или более абстрактных методов или когда интерфейс реализован в классе, где не все методы не реализованы.

+0

Downvoters могут оставить комментарий здесь. Plz. Спасибо – user2454830

+0

Не я, а возможно потому, что http://stackoverflow.com/a/19239583/19405 (с более ранней отметкой времени) говорит то же самое, но с более подробной информацией. –

6

Попытайтесь думать об этом так:

  • интерфейс Java представляет собой тип, который сводится к набор сигнатур методов. Любой тип, желающий быть ссылкой как интерфейс, должен обеспечивать реализацию этих подписей. На самом деле нет контракта на поведение. Ваша реализация ничего не может сделать и по-прежнему будет «реализовывать» интерфейс.

  • Java abstract class является типом, с частично указанным поведением, внутренняя реализация которого по какой-либо причине должна быть указана в его наследнике. У этого класса есть поведение, которое можно переопределить/указать в его наследниках.

  • ADT - набор ожидаемых видов поведения. Вы предполагаете, что после звонка adt.remove(element) вы вызываете adt.get(element) и получаете null.

Ответ на ваш вопрос: просто интерфейса недостаточно, чтобы быть ADT.

  • Все, что правильно реализует ваш интерфейс MyListADT<T> является ADT. Его внешнее поведение должно соответствовать концепции ADT. Это означает, что для того, чтобы считаться ADT, ваш тип должен нести реализацию, которая возникает либо в абстрактном классе, либо в обычном классе. Например: java.util.List<T> - это интерфейс для ADT, но java.util.ArrayList<T> и java.util.LinkedList<T> являются фактически ADT, потому что их фактическое поведение соответствует концепции ADT.
18

Там, кажется, путанице в этом Q & А. Вопрос был о «абстрактный тип данных и интерфейс» и большинство ответов concetrating о «Абстрактные классы».

Термины «абстрактный тип данных» и абстрактный класс относятся к двум совершенно другим понятиям, хотя оба они используют слово «абстрактный». Абстрактный тип данных - это автономный, определяемый пользователем тип, который связывает данные с набором связанных операций. Он ведет себя так же, как делает встроенный тип. Однако он не наследуется от других классов и не служит основой для других производных классов. Если вы посмотрите об этом в wiki, вы увидите: «Абстрактный тип данных определяется как математическая модель объектов данных, составляющих тип данных, а также функции, которые работают с этими объектами. Стандартных соглашений для их определения нет Широкое разделение может быть проведено между «императивными» и «функциональными» стилями определения ». Например, в Java у нас есть интерфейс List. Он определяет структуру данных с набором методов для работы, но не предоставляет никакой реализации как таковой.

Напротив, абстрактный класс представляет собой нечто вроде абстрактного типа данных. Абстрактный класс - это класс, объявленный абстрактом - «он может включать или не включать абстрактные методы». Абстрактные классы не могут быть созданы, но они могут быть подклассами. Это не тип данных. Абстрактный класс - это просто скелетный интерфейс, который определяет набор сервисов, реализуемых подклассами. К сожалению, различие между двумя понятиями часто путают. Многие люди ошибочно используют термин абстрактный тип данных, когда они действительно ссылаются на абстрактный класс.

В моем Interfaces мнений являются способом в Java реализации «АТДА»

Вы можете прочитать о «Abstract Data Type» в Wiki. Кроме того, если вы хотите узнать больше об абстрактном типе данных в java, вы можете сослаться на эту ссылку, http://www.e-reading.ws/bookreader.php/138175/Abstract_Data_Types_in_Java.pdf, ее действительно хорошо.

Большинство из вас могут быть знакомы с абстрактными классами, Тем не менее вы можете прочитать об этом из http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

Чтобы добавить к этой путанице, Java 8 ввел то, что называется «Default Methods», с помощью которого мы могли бы дать реализации для методы в интерфейсе. Чтобы устранить эту путаницу, вы можете сослаться на этот вопрос с потоковым потоком Interface with default methods vs Abstract class in Java 8

1

Для большего зазора. Синтаксис и примеры

синтаксис абстрактного класса

public abstract class MyAbstractClass 
{ 
    //code 
    public abstract void method();  
} 

пример абстрактного класса

public abstract class Animal 
{ 
    abstract void walk();  
} 

public class Dog extends Animal 
{ 
    void walk() 
    { 
     //Implementation is done here 
    } 
} 

синтаксис интерфейса

public interface NameOfInterface 
{ 
    //Any number of final, static fields 
    //Any number of abstract method declarations\ 
} 

пример интерфейса

interface Animal { 

    public void eat(); 
    public void travel(); 
} 

реализующего интерфейс

public class MammalInt implements Animal{ 

    public void eat(){ 
     System.out.println("Mammal eats"); 
    } 

    public void travel(){ 
     System.out.println("Mammal travels"); 
    } 

    public int noOfLegs(){ 
     return 0; 
    } 

    public static void main(String args[]){ 
     MammalInt m = new MammalInt(); 
     m.eat(); 
     m.travel(); 
    } 
} 

простирающейся интерфейс

//Filename: Sports.java 
public interface Sports 
{ 
    public void setHomeTeam(String name); 
    public void setVisitingTeam(String name); 
} 

//Filename: Football.java 
public interface Football extends Sports 
{ 
    public void homeTeamScored(int points); 
    public void visitingTeamScored(int points); 
    public void endOfQuarter(int quarter); 
} 

//Filename: Hockey.java 

public interface Hockey extends Sports 
{ 
    public void homeGoalScored(); 
    public void visitingGoalScored(); 
    public void endOfPeriod(int period); 
    public void overtimePeriod(int ot); 
} 

простирающиеся несколько интерфейсов

public interface Hockey extends Sports, Event 

распространяется и реализует Оба

interface A can extends interface B 
class A can extends class B   
class A implements interface A 
class A extends class B implements interface A 
4

В соответствии с [вики] http://en.wikipedia.org/wiki/Abstract_data_type

В информатике, абстрактный тип данных (ADT) является математическая модель для определенного класса структур данных, которые имеют сходное поведение; или для определенных типов данных одного или нескольких языков программирования, которые имеют сходную семантику. Абстрактный тип данных определяется косвенно только операциями, которые могут выполняться на нем, и математическими ограничениями на эффекты (и, возможно, стоимость) этих операций.

Для языка программирования Java

вы можете взять интерфейс List Java в качестве примера.Интерфейс явно не определяет какого-либо поведения вообще, потому что нет конкретного класса List. Интерфейс определяет только набор методов, которые должны реализовывать другие классы (например, ArrayList и LinkedList), чтобы считаться списком.

, но суть в том, что это понятие

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