2

「インターフェース」と「抽象クラス」に関する多くの投稿を読みました

オブジェクトの特徴を語るときは、基本的に「抽象クラス」を使います。

また、オブジェクト機能ができることについて話すときは、「インターフェース」を使用します。

しかし、それでも混乱するので、自分で練習するための例を作ります。

だから今、私はオブジェクトの「貨物」について考えています。

    public abstract class cargo {

        protected int id;

        public abstract int getWidth(int width);

        public abstract int setWidth(int width);

        public abstract int setHeight(int h);

        public abstract int getHeight(int h);

        public abstract int setDepth(int d);

        public abstract int getDepth(int d);

        public abstract int volume(int w,int h,int d);

        public int getId(){
            return this.id;
        }

        public abstract int setId();

        public abstract void setBrand();

        public abstract void getBrand( );

        .....so on , still have a lot of characteristic of a cargo
    }

    //in the other class
    public class usaCargo extends cargo{
                  ....
                  private 

    }

だからここに私のデザインに関するいくつかの質問があります.

1.実際のプログラミングプロジェクトの世界では、実際に上記のようにやっているのですか? 私にとっては、デザインは大丈夫だと思います。貨物の基本的な特性を満たしています。

  1. "private id" を設定すると、この変数はプライベートであるため、実際にはサブクラスで "id" を使用できません。つまり、抽象クラスで定義したすべての変数は public/protected でなければならないということですか?

  2. 私の貨物が何らかのインターフェースを実装できるように、誰かが適切な例を挙げてもらえますか?

    public interface registration{
         public void lastWarrantyCheck();
    }
    

    しかし、ここには適していないようです...

  3. 通常、インターフェイス内で変数を定義することはありませんか??

私は OOP についてもっと理解を深めようとしています。長い質問をお許しください。

4

3 に答える 3

1
  1. 抽象クラスには実装を含めることができるため、プライベート変数とメソッドを含めることができます。一方、インターフェースはできません。

  2. インターフェイスを実装する方法の例をいくつかここで見つけることができます。ただし、以下に登録例を実装する方法を含めました。

    public class Cargo implements Registration{
       public void lastWarrantyCheck(){
          System.out.println("Last warranty check");
       }           
    }
    
  3. インターフェイス変数は使用できますが、定数宣言 (static と final の両方であると宣言されている変数宣言) のみを含める必要があります。詳細については、こちらを参照してください

于 2013-02-23T04:26:47.700 に答える
1

抽象クラスで定義されたメソッドが使用する変数を持つように、抽象クラスで変数を定義します。これらの変数のスコープは、具体的なクラスがそれらの変数にアクセスする方法によって異なります。

private具象クラスに抽象クラスで定義されたゲッターまたはセッターを強制的に通過させたい場合に使用する必要があります。

protected具象クラスに変数への直接アクセスを許可する場合に使用する必要があります。

public任意のクラスから変数にアクセスできるようにする場合に使用する必要があります。

Cargo オブジェクトが実装する可能性のある適切なインターフェイスは、貨物をソースから宛先に移動する方法のように、Shippable である可能性があります。一部の貨物は貨物列車で出荷される場合もあれば、飛行機で出荷できる場合もあります。具体的なクラスで Shippable を実装し、そのタイプの貨物をどのように出荷するかを定義する必要があります。

public interface Shippable {
    public void ship();
}

最後に、インターフェイスで定義された変数は public static および final である必要があり、これは定数変数であることを意味します。

これで問題が解決することを願っています!

于 2013-02-23T04:35:12.483 に答える
1
  1. 抽象クラスの変数は として宣言することprotectedができ、それらはそのクラスおよび拡張クラス内でのみ使用できます。 Private拡張クラス内で変数にアクセスすることはできません。

  2. インターフェイスは、それらを実装するクラスが必要とする関数のリストを提供します。たとえば、インターフェイス hasWarranty を使用して、保証関連のアクティビティを処理するためにオブジェクトが必要とするすべての関数を定義できます。

    public interface hasWarranty {
        public void lastWarrantyCheck();
        public void checkWarranty();
    }
    

    次に、保証関連のアクティビティを実行する必要があるオブジェクトは、そのインターフェイスを実装する必要があります。

    // Disclaimer: been away from Java for a long time, so please interpret as pseudo-code.
    
    // Will compile
    public class Car implements hasWarranty {
        public void lastWarrantyCheck() {
            ... need to have this exact function or program won't compile ...
        }
        public void checkWarranty() {
            ... need to have this exact function or program won't compile ...
        }
    }
    
    // Missing one of the required functions defined in hasWarranty
    public class Bus implements hasWarranty {
        public void lastWarrantyCheck() {
            ... need to have this exact function or program won't compile ...
        }
    }
    
  3. インターフェイスで宣言された変数は不変であり、そのインターフェイスを実装するすべてのオブジェクトによって共有されるため、定数のみが実際に使用されます。それらは暗黙的に「静的最終」です。

于 2013-02-23T04:40:40.327 に答える