java入門⑨ 抽象メソッド実装、インターフェイス実...
TRANSCRIPT
JAVA入門⑨抽象メソッド実装、インターフェイス実
装、継承
JAVA入門⑨抽象メソッド実装、インターフェイス実
装、継承
簡単JAVA説明⑱簡単JAVA説明⑱
抽象クラスabstractという修飾子がついたクラスを抽象クラ
スといいます。特徴として
1.インスタンスを作成することができない。
つまり new 演算子でインスタンスを作成できません。
例
abstract class miniTest {
:
}
public static void main(){
miniTest mt = new miniTest(); ・・・・できない!
}
簡単JAVA説明⑱簡単JAVA説明⑱
抽象クラス
特徴
1.抽象クラス はそのままではインスタンス化することができず、必ずサブクラスを定義して不完全なメソッドの実体を定義してから使用する必要があります。
2.通常、ひとつ以上の 抽象メソッド を含みます。
3.抽象メソッドはメソッド名、引数の型のみが定義されていますので、どこかでその中身を定義する必要があります。
簡単JAVA説明⑱簡単JAVA説明⑱
構文
abstract class クラス名
{
フィールド宣言;
abstract 戻りの型 メソッド名(引数リスト);
:
}
簡単JAVA説明⑱簡単JAVA説明⑱
抽象クラスの利用
1.抽象クラスはサブクラスを作成できます。
2.サブクラスでインスタンスを作成するためには継承したメソッドの内容をオーバーライドする(再定義する)。
簡単JAVA説明⑱簡単JAVA説明⑱
例abstract class miniTest{
protected int juni;
public void setJuni(int j){
juni=j;
System.out.println("順位は"+ juni +"です。");
}
abstract void show();
}
簡単JAVA説明⑱簡単JAVA説明⑱
class Test1 extends miniTest{
private int no;
private double score;
Test1(int n, double s){
no=n;
score=s;
System.out.println("番号は"+ no + "点数は"+score);
}
public void show(){
System.out.println("番号は"+no);
System.out.println("点数は"+score);
System.out.println("順位は" + juni);
}
}
簡単JAVA説明⑱簡単JAVA説明⑱class Test2 extends miniTest{
private int no;
private double score;
Test2(int m){
no=m;
System.out.println("番号は"+ no);
}
public void show(){
System.out.println("番号は"+no);
System.out.println("順位は" + juni);
}
}
簡単JAVA説明⑱簡単JAVA説明⑱
class Sample1{
public static void main(String args[]){
miniTest tes[] = new miniTest[2];
tes[0] = new Test1(1,56);
tes[0].setJuni(20);
tes[1] = new Test2(2);
tes[1].setJuni(25);
tes[0].show();
tes[1].show();
}
}
簡単JAVA説明⑱簡単JAVA説明⑱
実行結果番号は1点数は56.0
順位は20です。
番号は2
順位は25です。
番号は1
点数は56.0
順位は20
番号は2
順位は25
TEST1番号、点数、順位
TEST2番号、順位
簡単JAVA説明⑱簡単JAVA説明⑱
抽象クラスでは、フィールドは変更可なので、
フィールド、メソッドを継承、再定義して用いま
す。ここでは、TEST1、TEST2で順位と表示の
メソッドを再定義し用いています。
フィールド、メソッド
継承、再定義抽象クラス
簡単JAVA説明⑱簡単JAVA説明⑱
4. インターフェイス
抽象クラスと同じような仕組みとして、インターフェイ
スというものがあります。
構文interface インタフェース名 {
型名 フィールド名=式;
戻りの型 メソッド名();
}
簡単JAVA説明⑱簡単JAVA説明⑱
インターフェイス
特徴
1.フィールド、メソッドを持つ
2.コンストラクタは持たない
3.メンバには何も修飾子をつけないが
フィールドは定数(public static final)
メソッドは抽象メソッド(abstract)
4.インスタンスは作成できない
簡単JAVA説明⑱簡単JAVA説明⑱
5.インターフェイスの実装構文
class クラス名 impliments インターフェイス名{
・・・
}
インスタンス作成のためには、
「インターフェイスのメソッドを全て定義する」
必要があります。
以下に例をあげます。
簡単JAVA説明⑱簡単JAVA説明⑱interface miniTest{
void show();
}
簡単JAVA説明⑱簡単JAVA説明⑱
class Test1 implements miniTest{
private int no;
private double score;
public Test1(int n, double s){
no=n;
score=s;
System.out.println("番号は"+no+ "点数は"+score);
}
public void show(){
System.out.println("番号は"+no);
System.out.println("点数は"+score);
}
}
簡単JAVA説明⑱簡単JAVA説明⑱
class Test2 implements miniTest{
private int jun;
public Test2(int j){
jun=j;
System.out.println("順位は"+jun);
}
public void show(){
System.out.println("順位は"+jun);
}
}
簡単JAVA説明⑱簡単JAVA説明⑱
class Sample2{
public static void main(String args[]){
miniTest tes[] = new miniTest[2];
tes[0] = new Test1(1,56);
tes[1] = new Test2(20);
tes[0].show();
tes[1].show();
}
}
簡単JAVA説明⑱簡単JAVA説明⑱
実行結果
番号は1点数は56.0
順位は20
番号は1
点数は56.0
順位は20
TEST1
TEST2
簡単JAVA説明⑱簡単JAVA説明⑱
解説
抽象クラスでは、フィールドは変更可でしたが、
インターフェイスではこれらは変更不可(定数)ですが、
メソッドを継承し、それらをオーバーライド(再定義)し
使っていくのが特徴です。ここでは、show()と言うメソッ
ドを再定義。
メソッド継承、再定義
インターフェイス
簡単JAVA説明⑱簡単JAVA説明⑱
多重継承
構文
class クラス名 implements インターフェイス名1、インターフェイス名2、・・・
{
・・・
}
簡単JAVA説明⑱簡単JAVA説明⑱
例
interface midTest
{
void show1();
}
interface endTest
{
void show2();
}
簡単JAVA説明⑱簡単JAVA説明⑱class Test implements midTest,endTest
{
private int no;
private double score;
public Test(int n, double s){
no=n;
score=s;
System.out.println("番号は"+no+ "点数は"+score);
}
public void show1(){
System.out.println("番号は"+no);
System.out.println("点数は"+score);
}
public void show2(){
System.out.println("テストは終わり");
}
}
簡単JAVA説明⑱簡単JAVA説明⑱
//メイン
class Sample3{
public static void main(String args[]){
Test tes = new Test(1,56);
tes.show1();
tes.show2();
}
}
簡単JAVA説明⑱簡単JAVA説明⑱
実行結果番号は1点数は56.0
番号は1
点数は56.0
テストは終わり
簡単JAVA説明⑱簡単JAVA説明⑱
インターフェイスの拡張
クラス同様、インターフェイスも拡張出来ます。
サブインターフェイス
インターフェイス
拡張
ス-パーインターフェイス
インターフェイス
簡単JAVA説明⑱簡単JAVA説明⑱
構文
interface サブインターフェイス名 extends スーパーインターフェイス名1、スーパーインターフェイス名2、・・・
{
・・・
}
簡単JAVA説明⑱簡単JAVA説明⑱
interface endTest
{
・・・
}
interface midTest extends endTest
{
・・・
}
class Test implements midTest
{
・・・
}
ス‐パインターフェイス
サブインターフェイス
クラス