JAva開発-abstractクラス、finalクラス
918 ワード
一般的にabstractクラスは、次の3つの場合に使用されます.
(1)クラスにabstractメソッドが含まれている.
(2)クラスのスーパークラスはabstractメソッドを宣言するが,現在のクラスでは実現していない.
(3)クラスimplementのインタフェースでメソッドが宣言または継承され,クラスで継承されていないか,実装されていない.
注意:抽象クラスの不完全性のため、オブジェクトをインスタンス化することはできません.次の例では、次のように書きます.
Point p=new Pointでコンパイルエラーが発生します.
ただし、Simpleクラスはインスタンス化できます:Point p=new Simple()
abstract Class Point
{
int x=1,y=1;
void move(int dx,int dy )
{
x+=dx;
y+=dy;
alert();
}
abstract void alert()//Pointクラスに抽象メソッドalert()が含まれているため、Pointはabstractタイプである.
}
abstract ColorPoint extends Point
{
int color;
}//ColorPointは親Pointを継承していますが、親のalert()メソッドは実装されていませんのでabstractタイプでなければなりません
class Simple extends Point{
alert(){}
}//alert()メソッドには具体的な実装コードはありませんが、クラスSimpleが親クラスのメソッドを実装しているため、Simpleはabstractタイプとして宣言する必要はありません.
クラスがfinalクラスとして宣言された場合、その定義は完全であり、どのサブクラスも存在できないことを示します.
(1)クラスにabstractメソッドが含まれている.
(2)クラスのスーパークラスはabstractメソッドを宣言するが,現在のクラスでは実現していない.
(3)クラスimplementのインタフェースでメソッドが宣言または継承され,クラスで継承されていないか,実装されていない.
注意:抽象クラスの不完全性のため、オブジェクトをインスタンス化することはできません.次の例では、次のように書きます.
Point p=new Pointでコンパイルエラーが発生します.
ただし、Simpleクラスはインスタンス化できます:Point p=new Simple()
abstract Class Point
{
int x=1,y=1;
void move(int dx,int dy )
{
x+=dx;
y+=dy;
alert();
}
abstract void alert()//Pointクラスに抽象メソッドalert()が含まれているため、Pointはabstractタイプである.
}
abstract ColorPoint extends Point
{
int color;
}//ColorPointは親Pointを継承していますが、親のalert()メソッドは実装されていませんのでabstractタイプでなければなりません
class Simple extends Point{
alert(){}
}//alert()メソッドには具体的な実装コードはありませんが、クラスSimpleが親クラスのメソッドを実装しているため、Simpleはabstractタイプとして宣言する必要はありません.
クラスがfinalクラスとして宣言された場合、その定義は完全であり、どのサブクラスも存在できないことを示します.