-5

タイトルが言ったように、これが良いプログラミング/設計方法であるかどうかを尋ねています。

私はクラスを取得しました。これは単なるインターフェイスにすることができます(1つの抽象メソッドといくつかの属性のみを取得しました)

私の場合の例として、これは似ています:

トラック、自動車、モトなどのメイン クラス Car を取得し、抽象メソッド void move() を持っています。

CAR をインターフェースとして設計し、他の具象クラスを CAR クラスの一般化として設計できますか? それともこれは間違っていますか?

public interface Car{
  private int length;
  private float speed;

  public void move();
}

public class truck : Car{
  //Constructor
  public Car(int size)
  {
     length=size;
  }

  public void move()
  {
     //Move code
  }
}

その後

Car myCar = new truck();
myCar.move();

正しいでしょうか?

4

2 に答える 2

1

ここでは、「抽象」と「インターフェース」という用語を混同しています。

実装するインターフェースによってクラスのインスタンスを参照することはまったく問題ありません。ICookieFactoryここに、 abstract をベイクするインターフェースが表示されますCookie

public interface ICookieFactory 
{
    Cookie BakeCookie(); 
}

public class ChocolateChipCookieFactory : ICookieFactory
{
    public Cookie BakeCookie()
    {
        return new ChocolateChipCookie();
    }
}

public abstract class Cookie
{
    public abstract IEnumerable<Crumb> Crumble();
}

public class ChocolateChipCookie : Cookie
{
    public override IEnumerable<Crumb> Crumble()
    {
        ...
    }
}

ICookieFactory factory = new ChocolateChipCookieFactory();
Cookie cookie = factory.BakeCookie();
foreach (Crumb crumb in cookie.Crumble())
{
    ...
}

インターフェイスは、サポートする必要があるメソッドまたはプロパティを実装に通知しますが、実装コード自体を提供することはできません。インターフェイスでフィールドを定義することはできません。

抽象クラスには、任意の数のフィールドとメソッド、abstractおよび子クラスによってオーバーライドする必要があるメソッドを含めることができます。

1 つのクラスで複数のインターフェイスを実装できますが、継承できるのは 1 つの抽象クラスのみです。

于 2015-08-14T10:21:14.603 に答える
0

私の知る限り、はい、子クラスが汎化関連の場合となるインターフェイスを作成する可能性と権利があります。

しかし、私の場合、C.Evenhuisの唯一の答えのおかげで、抽象クラスを作成する方が良いことに気付きました(したがって、子クラスがオーバーライドする必要があるいくつかの抽象メソッドと、子クラスがオーバーライドできるいくつかの具体的なメソッドを組み合わせることができます)または単に使用します)。

于 2015-08-14T11:33:31.917 に答える