回答:
はい、できます。やってみませんか?
はい、できます。Javaで使用される抽象クラスは、クラスのオブジェクトを作成できないことを示します。そして、サブクラスがそのメソッドの実装を提供する必要がある抽象メソッド。
したがって、抽象メソッドなしで抽象クラスを簡単に定義できます。
例として:
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
これで結構です。
はい、すでに実装されているメソッドのみでインスタンス化できないクラスを宣言できます。これは、将来的に抽象メソッドを追加する場合や、抽象プロパティがなくてもクラスを直接インスタンス化したくない場合に役立ちます。
はい、抽象メソッドなしで抽象クラスを宣言できます。クラスを抽象として宣言する目的は、クラスをインスタンス化することではありません。
だから2つのケース
1)抽象メソッドを持つ抽象クラス。
これらのタイプのクラスでは、この抽象クラスからクラスを継承し、クラス内の抽象メソッドをオーバーライドする必要があります。例:GenricServletクラス
2)抽象メソッドのない抽象クラス。
これらのタイプのクラスでは、この抽象クラスからクラスを継承する必要があります。例:HttpServletクラス実行する目的は、子クラスにロジックを実装しない場合、親ロジックを取得できることです。
どちらも独立した概念であるため、抽象メソッドなしで抽象クラスを作成できます。クラスの抽象を宣言すると、それだけでインスタンス化することはできず、サブクラス化することしかできません。メソッドの抽象を宣言することは、メソッドがサブクラスで定義されることを意味します。
はい、抽象メソッドなしで抽象クラスを定義できます。ただし、内部にメソッドがない場合は、インターフェイスを使用することをお勧めします
はい、できます。時々、あなたはこれをする目的が何であるかというこの質問をされるかもしれませんか?答えは、クラスが独自にインスタンス化するのを制限する必要がある場合です。その場合、ユーザーに抽象クラスを拡張して子クラスをインスタンス化してもらいます
できます。私の心の中での質問は、あなたがもっとすべきです。当初から、難しい答えはありません。あなたの現在の状況に正しいことをしてください。
私にとって、継承とは「is-a」関係を意味します。さらに専門的なサブタイプ(アルザス、プードルなど)によって拡張できる犬のクラスを想像してみてください。この場合、サブタイプは犬なので、犬クラスを抽象化することは正しいことかもしれません。犬が首輪を必要としているとしましょう。この場合、継承は意味がありません。犬と首輪の間に「is-a」の関係があるのは無意味です。これは間違いなく「has-a」関係であり、襟は共同オブジェクトです。犬が飼うことができるように首輪を抽象化することは意味がありません。
抽象メソッドを持たない抽象クラスが実際に「has-a」関係を表現していることがよくあります。これらの場合、私は通常、継承を使用せずにコードをより因数分解できることに気づきます。また、抽象メソッドを持たない抽象クラスはコードの匂いであることが多く、少なくともコードレビューで問題が発生するはずです。
繰り返しますが、これは完全に主観的なものです。抽象メソッドを持たない抽象クラスが理にかなっている状況があるかもしれません、それは完全に解釈と正当化次第です。あなたが取り組んでいるもののために最善の決定をしてください。
WindowDecorator
とCoffeeDecorator
は両方ともabstract
クラスですが、どちらもabstract
メソッドを含みません。