6

私は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とインターフェースの違いは何ですか、またはADTはインターフェースです

4

8 に答える 8

8

次のように考えてみてください。

  • Java インターフェースは、メソッド シグネチャのセットに要約されるタイプです。インターフェイスとして参照される任意の型は、これらのシグネチャの実装を提供する必要があります。実際には、行動契約はありません。あなたの実装は何もできず、インターフェースを「実装」しています。

  • Java抽象クラスは、部分的に指定された動作を持つ型であり、何らかの理由でその内部実装を継承者で指定する必要があります。このクラスには、継承者で再定義/指定できる動作があります。

  • ADT は、予期される一連の動作です。adt.remove(element)を呼び出した後、を呼び出しadt.get(element)て受信すると仮定しますnull

あなたの質問への答えは、インターフェースだけでは ADT として十分ではないということです。

  • インターフェイスを正しく実装するものはすべてMyListADT<T>ADT です。その外部動作は、ADT の概念に準拠する必要があります。これは、ADT と見なされるには、型が実装を保持する必要があることを意味します。これは、抽象クラスまたは通常のクラスのいずれかになります。例:java.util.List<T>は ADT のインターフェイスですが、実際の動作は ADT の概念に準拠しているため、java.util.ArrayList<T>とは実際には ADT です。java.util.LinkedList<T>
于 2014-05-13T09:47:20.793 に答える
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
于 2014-05-15T05:32:44.077 に答える