Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象数据类型和接口_Java - Fatal编程技术网

Java 抽象数据类型和接口

Java 抽象数据类型和接口,java,Java,我是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); } 接口mylistat{ 虚增(T-var); 无效添加(T

我是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);
}
接口mylistat{
虚增(T-var);
无效添加(T var、int pos);
void display();
T移除(内部位置);
无效清除();
布尔包含(对象o);
}
我们将ADT定义为一个接口。现在,ADT和接口或ADT是接口之间的区别是什么

What is the difference between Abstract data type and Interface.
  • 默认情况下,Java接口中声明的变量是最终变量。一 抽象类可能包含非最终变量
  • 默认情况下,Java接口的成员是公共的。Java摘要 班级成员可以有普通的风格,比如私人, 保护等等。。 查看此信息
  • 在爪哇-

    接口只能有抽象方法,这意味着您只能声明方法,即。方法可以有任何默认实现。但抽象类可以有抽象方法或完整方法

    如果您要扩展的类是抽象的,那么您的子类应该声明为抽象的,或者应该实现超类的所有抽象方法。 在case-In接口中,您可以实现任意数量的接口。在这里,您还应该实现类中所有接口的所有抽象方法,或者应该将其声明为抽象

    请点击这些链接


    数据及其方法的组合称为抽象数据类型(ADT)

    Java接口是指定(但不是实现)ADT的一种方法

    它指定ADT方法的名称、参数和返回类型(即标头)

    接口没有指定数据字段(公共常量除外),因为这是一个实现细节


    Java接口将ADT的要求指定为服务提供者(实现ADT的类)和客户端(类的用户)之间的契约。

    数据及其方法的组合称为抽象数据类型(ADT)

    Java接口是一种指定抽象数据类型(ADT)的方法


    当一个类包含零个或多个抽象方法时,或者当一个接口被实现到一个并非所有方法都未实现的类时,您可以将该类声明为抽象类。

    试着这样思考:

    • Java接口是一种类型,它归结为一组方法签名。任何类型,只要愿意作为接口引用,都必须为这些签名提供实现。实际上,没有行为契约。您的实现不能做任何事情,仍然是“实现”接口

    • Java抽象类是一种类型,具有部分指定的行为,由于某种原因,其内部实现必须在继承器中指定。此类确实具有行为,可以在其继承者中重新定义/指定

    • ADT是一组预期行为。您假设,在调用
      adt.remove(element)
      之后,您调用
      adt.get(element)
      并接收
      null

    您的问题的答案是:仅仅一个接口不足以成为ADT

    • 正确实现接口
      mylistat
      的所有内容都是ADT。其外部行为必须符合ADT概念。这意味着,要被视为ADT,您的类型必须带有实现,这将导致抽象类或普通类。例如:
      java.util.List
      是ADT的接口,但是
      java.util.ArrayList
      java.util.LinkedList
      实际上是ADT,因为它们的实际行为符合ADT的概念

    这一问答似乎有点混乱。问题是关于“抽象数据类型和接口”的,大多数答案都集中在“抽象类”上

    术语“抽象数据类型”和“抽象类”指的是两个完全不同的概念,尽管它们都使用“抽象”一词。抽象数据类型是一种自包含、用户定义的类型,它将数据与一组相关操作捆绑在一起。它的行为方式与内置类型相同。但是,它不从其他类继承,也不作为其他派生类的基础。如果您在wiki中搜索它,您会看到“抽象数据类型被定义为构成数据类型的数据对象的数学模型以及在这些对象上操作的函数。没有定义它们的标准约定。在“命令式”和“函数式”定义样式之间可能存在广泛的划分。”例如,在Java中,我们有列表接口。它定义了一个数据结构和一组要操作的方法,但不提供任何实现

    相反,抽象类决不是抽象数据类型。抽象类是声明为抽象的类——“它可能包含也可能不包含抽象方法”。抽象类不能实例化,但可以子类化。它不是一种数据类型。抽象类只是一个框架接口,它指定了其子类实现的一组服务。不幸的是,这两个概念之间的区别经常被混淆。许多人在实际引用抽象类时错误地使用术语抽象数据类型

    在我看来,接口是Java实现“抽象数据类型”的方式

    您可以在Wiki中阅读有关“”的信息。此外,如果您想更多地了解java中的抽象数据类型,可以参考此链接,它非常好

    你们中的大多数人可能熟悉抽象类,但你们仍然可以从

    为了增加这种混乱,Java8引入了一种称为“”的东西,通过它我们实际上可以给出接口中方法的实现。要消除这种混淆,您可以参考此stackoverflow问题,以了解更多信息
    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