インターフェイスと同様に、抽象クラスは実装なしでメソッド シグネチャのみを持つことができますか? もし、そうなら:
- 抽象クラスはインターフェイスとどう違うのですか?
- 基本クラスとして抽象クラスを持つ別のクラスは、基本クラス メソッドの本体をどのように実装できますか?
抽象クラスには実装を含めることができますが、必須ではありません。これは、インターフェースとの違いの 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
}
インターフェイスのように、抽象クラスは実装なしでメソッドシグネチャのみを持つことができますか?
はい。抽象クラスはメソッドを実装できます。
インターフェイスとの違いは何ですか?
インターフェイスで宣言された変数は、デフォルトで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
インターフェイスと同様に、抽象クラスは実装なしでメソッド シグネチャのみを持つことができますか? もし、そうなら:
はい。ただし、実装することもできます...
abstract
とは異なり、クラスにメソッドを実装することもinterfaces
できますが、のインスタンスを作成することはできません。abstract class
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() {
...
}
}
JAVAではい、
このように抽象クラスを使用する場合、インターフェースと抽象クラスの間に違いはありません。抽象クラスが本当に重要なのは、サブクラスに継承されることを期待する一般的な実装を提供できることです。これは、インターフェイスでは実行できません。
はい、私が言ったように、その抽象クラスはインターフェースと同じように動作します、あなたはサブクラスのメソッドをオーバーライドすることができます
例えば:
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());
}
}
Like Interfaces, can an abstract class have only method signature without implementation? If yes:
はい、クラスabstract
はabstract
、単一の抽象メソッドを持っている場合でも、すべてのメソッドを持つことができます。メソッドがなくてもabstract
、クラスを宣言できます。abstract
abstract
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であり、ChildClass
Baseクラスを拡張している場合は、そうでない場合はmake tでもabstract
メソッドを実装できます。ChildClass
ChildClass
abstrac
public class ChildClass extends BaseClass{
void display(){
/// Your Implementation here
}
}
abstract class BaseClass{
abstract void display();
}
抽象クラスは、インスタンス化できないクラスです。これは、具象クラス (完全に実装されている) とインターフェイス (まったく実装されていない) の間にあります。
完全に実装された通常のメンバー (変数、メソッドなど) を含めることができます。
また、実装されていない抽象メンバーを含めることもできます。実装されていないメンバー (メソッド シグネチャなど) は、abstract としてマークする必要があります。
だからあなたの質問に答えるために:
インターフェイスと同様に、抽象クラスは実装なしでメソッド シグネチャのみを持つことができますか?
あなたの言い回しは、はいまたはいいえで答えられるほど明確ではありません。抽象クラスは実装されたメソッドを持つことができ、実装されていない抽象メソッドを持つことができます。これらは としてマークする必要がありますabstract
。マークされていない限り、実装のないメソッドを持つことはできませんabstract
。
はいの場合: インターフェイスとの違いは何ですか?
メンバーの実装を許可するためです。
この抽象クラスが基本クラスとして機能している別のクラスが、そのメソッドの本体をどのように実装できるでしょうか?
すべての抽象メンバーを実装するだけです。
public abstract class A
{
public abstract void Test();
}
public class B : A
{
public void Test(){ return; }
}