-3

インターフェイスと同様に、抽象クラスは実装なしでメソッド シグネチャのみを持つことができますか? もし、そうなら:

  1. 抽象クラスはインターフェイスとどう違うのですか?
  2. 基本クラスとして抽象クラスを持つ別のクラスは、基本クラス メソッドの本体をどのように実装できますか?
4

8 に答える 8

3

抽象クラスには実装を含めることができますが、必須ではありません。これは、インターフェースとの違いの 1 つです。

abstract class classA
{
    abstract public void MethodA();

    public void MethodB()
    {
        Console.WriteLine("This is MethodB inside ClassA");
    }
}

class classB : classA
{

    public override void MethodA()
    {
        Console.WriteLine("This is MethodA inside class B");
    }
}

抽象基本クラスにメソッドを実装し、後でそれをオーバーライドできるようにする場合は、メソッドを仮想として宣言する必要があります。

virtual protected void MethodC(){
  //this can be overridden
}
于 2012-07-04T06:58:48.530 に答える
2

インターフェイスのように、抽象クラスは実装なしでメソッドシグネチャのみを持つことができますか?

はい。抽象クラスメソッドを実装できます。

インターフェイスとの違いは何ですか?

インターフェイスで宣言された変数は、デフォルトでfinalです。抽象クラスには、非最終変数が含まれる場合があります。

インターフェイスのメンバーは、デフォルトでパブリックです。抽象クラスは、private、protectedなどのクラスメンバーの通常のフレーバーを持つことができます。

インターフェイスは完全に抽象的であり、インスタンス化することはできません。抽象クラスもインスタンス化できませんが、main()が存在する場合は呼び出すことができます。

抽象クラスと比較すると、余分な間接参照が必要なため、インターフェイスは低速です。

次のリンクを参照してください。

http://forums.asp.net/t/1240708.aspx/1

http://java.sys-con.com/node/36250

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

于 2012-07-04T06:48:29.483 に答える
2
  1. インターフェイスは完全に抽象化されたクラスであり、
    署名のみを意味し、実装もデータ メンバーもありません。
    一方、定義による抽象クラスには、少なくとも 1 つの抽象メソッドが必要です。
    また、実装を持つこともできます。また、継承者に継承されるデータ メンバーを含めることもできます。
  2. 継承者は、それを実装するために同じ署名で抽象メソッドを実装する必要があります
于 2012-07-04T06:58:10.513 に答える
2

インターフェイスと同様に、抽象クラスは実装なしでメソッド シグネチャのみを持つことができますか? もし、そうなら:

はい。ただし、実装することもできます...

abstractとは異なり、クラスにメソッドを実装することもinterfacesできますが、のインスタンスを作成することはできません。abstract class

インターフェイスと抽象クラス

抽象クラスとインターフェイス

于 2012-07-04T06:37:01.993 に答える
2

Javaで:

q1: 抽象クラスにはメソッド定義と通常のメソッドを含めることができますが、インターフェイスには含めることができません。

q2: http://docs.oracle.com/javase/tutorial/java/IandI/abstract.htmlから

//this is the abstract class
public abstract class GraphicObject {
  abstract void draw();
}

//this is the implementation 
class Rectangle extends GraphicObject {
  void draw() {
    ...
  }
}
于 2012-07-04T06:42:08.967 に答える
1

JAVAではい、

  1. このように抽象クラスを使用する場合、インターフェースと抽象クラスの間に違いはありません。抽象クラスが本当に重要なのは、サブクラスに継承されることを期待する一般的な実装を提供できることです。これは、インターフェイスでは実行できません。

  2. はい、私が言ったように、その抽象クラスはインターフェースと同じように動作します、あなたはサブクラスのメソッドをオーバーライドすることができます

例えば:

public abstract class AbstractClassWithoutImplementation {

public abstract String methodA();

}

public class Implementation extends AbstractClassWithoutImplementation {

@Override
public String methodA() {
    // TODO Auto-generated method stub
    return "Yes";
}

public static void main(String[] args){
    Implementation im = new Implementation();
    System.out.println(im.methodA());
}

}

于 2012-07-04T06:51:08.093 に答える
1

Like Interfaces, can an abstract class have only method signature without implementation? If yes:

はい、クラスabstractabstract、単一の抽象メソッドを持っている場合でも、すべてのメソッドを持つことができます。メソッドがなくてもabstract、クラスを宣言できます。abstractabstract

How it differs from Interface?

インターフェイスでは、すべてのメソッドが抽象クラスに賭けられますが、その必要はありません。インターフェイス抽象クラスabstract publicについてお読みください。

How another class, for which this Abstract Class is acting as a base class, can implement the body of that method?

あなたBaseClassがAbstractであり、ChildClassBaseクラスを拡張している場合は、そうでない場合はmake tでもabstractメソッドを実装できます。ChildClassChildClass abstrac

public class ChildClass extends BaseClass{

void display(){

    /// Your Implementation here
}

}

abstract class BaseClass{

abstract void display();
}
于 2012-07-04T07:03:34.100 に答える
1

抽象クラスは、インスタンス化できないクラスです。これは、具象クラス (完全に実装されている) とインターフェイス (まったく実装されていない) の間にあります。

完全に実装された通常のメンバー (変数、メソッドなど) を含めることができます。

また、実装されていない抽象メンバーを含めることもできます。実装されていないメンバー (メソッド シグネチャなど) は、abstract としてマークする必要があります。

だからあなたの質問に答えるために:

インターフェイスと同様に、抽象クラスは実装なしでメソッド シグネチャのみを持つことができますか?

あなたの言い回しは、はいまたはいいえで答えられるほど明確ではありません。抽象クラスは実装されたメソッドを持つことができ、実装されていない抽象メソッドを持つことができます。これらは としてマークする必要がありますabstract。マークされていない限り、実装のないメソッドを持つことはできませんabstract

はいの場合: インターフェイスとの違いは何ですか?

メンバーの実装を許可するためです。

この抽象クラスが基本クラスとして機能している別のクラスが、そのメソッドの本体をどのように実装できるでしょうか?

すべての抽象メンバーを実装するだけです。

public abstract class A
{ 
    public abstract void Test();
}

public class B : A
{
    public void Test(){ return; }
}
于 2012-07-04T06:59:51.790 に答える