Download presentation
Presentation is loading. Please wait.
1
社会人学習講座 「Javaプログラミング概論」
第02回 前半 (2008年09月13日)
2
今日の教材 http://flute.u-shizuoka-ken.ac.jp/~s-okubo/class/java08/ にあります。
上記URLは、ご自宅でもアクセス可能です。 分量が沢山ありますが、全部やらなくて大丈夫です。 課題らしい課題もありません。 ソースを見て、分からないところ等ありましたら、お呼び下さい。
3
今日の内容 先週の復習とJavaの基本的な部分 前回の復習1(コンパイルと実行) 前回の復習2(クラスとは) static なメソッド
前回の復習3 (クラスの継承) abstract クラス・インターフェース Javaで書くGUI JavaアプレットとSwing
4
Javaのコンパイルと実行 テキストエディタでソースファイルを記述する。 たとえば、Hello.javaを書く。
コンパイルの方法 コンソール上で と入力する。 実行の方法 コンソール上で と入力する。 javac Hello.java java Hello
5
オブジェクト指向プログラミングと クラス
6
オブジェクト指向プログラミング main データをやり取りするオブジェクト(インスタンス)の 集合として構成されるプログラム
インスタンス間で データをやりとりする。 それぞれのインスタンスが処理を行う。 インスタンスA main インスタンスB 関数のように 使えるクラス インスタンスC
7
クラスとは? いわば、インスタンスの設計図。 インスタンスが、 どの様な変数を持っているか どの様なメソッド(関数)を持っているか
が記述してある。 あくまでも『設計図』なので、使用するためには、クラスに基づいたインスタンスを生成する必要がある。
8
オブジェクトって何? 直感編 缶A 缶 缶B 概念とか設計図の世界 実物(オブジェクト)の世界 中身 = オレンジ色の液体 できること
オブジェクトって何? 直感編 概念とか設計図の世界 実物(オブジェクト)の世界 中身 = オレンジ色の液体 できること 中身を出す 中身を入れる 缶A 缶 中身 = ?? 何も言われないと 空である 缶B 中身 = 水色の液体 できること 中身を出す 中身を入れる できること 中身を出す 中身を入れる
9
オブジェクトって何? 直感とJava編 缶A 缶 缶B Javaだと インスタンス と呼ぶ 概念とか設計図の世界 実物(オブジェクト)の世界
中身 = オレンジ色の液体 できること 中身を出す 中身を入れる 缶A 変数 コンストラクタ 缶 中身 = ?? 何も言われないと 空である 缶B 中身 = 水色の液体 できること 中身を出す 中身を入れる できること 中身を出す 中身を入れる クラス メソッド インスタンス インスタンス
10
オブジェクトって何? Java編 Data1 Test Data2 Javaだと インスタンス と呼ぶ 概念とか設計図の世界
実物(オブジェクト)の世界 contents = 10; メソッド pushContents(); popContests(); Data1 変数 コンストラクタ Test int contents; contests=0; Data2 contents = 20; メソッド pushContents(); popContests(); メソッド pushContents(); popContests(); クラス メソッド インスタンス インスタンス
11
サンプルプログラム Test dt dt test01=2; multiple(); クラスTestの詳細 class Test{
int test01=2; public void multiple(int test03){ System.out.println(test01 * test03); } public class Sample03a{ public static void main(String[] args){ Test dt = new Test(); dt.multiple(100); dt.test01=5; クラスTestの インスタンスdtを生成 dt test01=2; multiple(); メソッドを、引数100を渡して実行 test01=5; multiple(); dt インスタンスdtの変数test01に代入
12
static
13
クラスメンバとインスタンスメンバ 変数やメソッドには、static をつけることができます。
クラスメンバは、インスタンスを生成しなくても利用する ことができます。 クラスメンバには、 クラス名.メンバ名 のようにアクセスします。
14
直感的な図 Test 概念とか設計図の世界 実物(オブジェクト)の世界 int contents;
static と書かれたメンバが居ることに注目! static int st_cont; pushContents(); static cont(); インスタンスを生成しなくても、アクセス可能。 Test.st_cont=10; クラス名.メンバ名でアクセスする。 今回は、Test.st_cont の様にする。 Test. cont();
15
直感的な図 Test Data1 Data2 概念とか設計図の世界 実物(オブジェクト)の世界 int contents;
static int st_cont; st_cont; pushContents(); pushContents(); static cont(); cont(); Data2 contents = 20; Test.st_cont=10; st_cont; Test. cont(); pushContents(); cont();
16
直感的な図 Test Data1 Data2 概念とか設計図の世界 実物(オブジェクト)の世界 int contents;
static int st_cont; st_cont; pushContents(); pushContents(); static cont(); cont(); 同じものを利用。 Data2 contents = 20; Test.st_cont=10; st_cont; Test.cont(); pushContents(); cont();
17
Test.st_cont=15とすれば、Data1.st_cont も15に。
直感的な図 概念とか設計図の世界 実物(オブジェクト)の世界 Test int contents; Data1 contents = 10; static int st_cont; st_cont; pushContents(); pushContents(); Test.st_cont=15とすれば、Data1.st_cont も15に。 static cont(); cont(); Data2 contents = 20; Test.st_cont=15; st_cont; Test.cont(); pushContents(); cont();
18
直感的な図 Test Data1 Data2 ここに値を代入! Data1.st_count=20 概念とか設計図の世界
実物(オブジェクト)の世界 Test int contents; Data1 contents = 10; static int st_cont; st_cont; pushContents(); pushContents(); static cont(); cont(); Data2 contents = 20; Test.st_cont=20; st_cont; Test.cont(); pushContents(); ここに代入と同じ結果に! cont();
19
クラスの書き方の例 static と書くだけです インスタンスを生成しなくても使える class Test{
static int st_data; int data; public void test_func01(){ System.out.println(data); } public static void test_func02(){ System.out.println(st_data); public class Sample04a{ public static void main(String[] args){ Test.st_data=10; Test.test_func02(); } static と書くだけです インスタンスを生成しなくても使える
20
継承
21
継承とは あるクラスが存在しているとき、それを流用して、違うク ラスを記述することができる!。
Test01 Test02 int data01; int data01; int data02; test_func01(); test_func01(); もとのクラスをスーパークラス、新しくできたクラスをサ ブクラスと呼びます。 新しくできたサブクラスは、普通のクラスと同様の方法 でインスタンスを生成し、使えます。
22
サブクラスの書き方 もとのクラスを拡張(extends)する形で書きます。 直感的には、以下のような感じ。 スーパー クラス Test02
class サブクラス名 extends スーパークラス名 { 拡張したい内容を書く。 } 直感的には、以下のような感じ。 スーパー クラス Test02 int data02; int data01; test_func01(); Test01 サブ クラス 拡張された部分
23
サブクラスの書き方例 スーパークラス 拡張された内容 Test02 Test01 int data01; サブクラス int data02;
class Test01{ int data01; void test_func01(){中略} } class Test02 extends Test01{ int data02; スーパークラス 拡張された内容 Test02 Test01 int data01; サブクラス int data02; test_func01();
24
生成されたインスタンス dt02.test_func01()のように、 普通にアクセス dt02.data01のように、 普通にアクセス
class Test01{ int data01; void test_func01(){中略} } class Test02 extends Test01{ int data02; } public class Sample04d{ public static void main(String[] args){ Test02 dt02 = new Test02(); 以下略 dt02.test_func01()のように、 普通にアクセス dt02.data01のように、 普通にアクセス dt02 data01; data02; 普通に生成 test_func01();
25
メソッドのオーバーライド サブクラスの方で、 スーパークラスと同じ名前・引数の メソッドを定義した場合、 サブクラスで書いた方が有効に
class Test01{ int data01; void test_func01(){中略} } class Test02 extends Test01{ int data02; void test_func01(){中略} } メソッドのオーバーライド dt01(生成されたインスタンス) Test01 data01; data02; test_func01(); test_func01(); dt01.test_func01()として、 こちらが使われる。 こちらは使われない
26
アブストラクトクラス と アブストラクトメソッド
27
アブストラクトとは クラスを書く際に、拡張されることを前提に、クラスを書 くことができる。 アブストラクトクラス
アブストラクトクラスは、拡張されることが前提なので、 それ自身をクラスにするインスタンスは作れない。 アブストラクトクラスの中では、拡張時にオーバーライド されることを前提に、メソッドを書くことができる。 アブストラクトメソッド アブストラクトメソッドは、サブクラス内でオーバーライ ドしないと、コンパイル時にエラーが出る。
28
アブストラクトクラス 拡張されることを前提としたクラス 書式:通常のクラスの書き方に abstract とつける。
abstract 修飾子 class クラス名{ クラスと同じように、 変数の宣言 コンストラクタ メソッド 等を書く }
29
アブストラクトクラスの例 アブストラクトクラス Test01をスーパークラスとするサブクラスTest02
abstract class Test01{ void test01(){ System.out.println("Test 01"); } class Test02 extends Test01{ void test02(){ System.out.println("Test 02"); public class Sample06a{ public static void main(String[] args){ Test02 dt01 = new Test02(); アブストラクトクラス Test01をスーパークラスとするサブクラスTest02 インスタンスを生成。 Test01 dt01 = new Test01();はできない。
30
アブストラクトメソッド サブクラスで、オーバーライドされる前提のメソッド。
サブクラス内でオーバーライドされないと、コンパイル時 にエラーが出る。 書式:メソッドに abstract とつける。 abstract 修飾子 class クラス名{ 略 abstract 修飾子 返値の型 メソッド名(引数); } 必ずオーバーライドされるため、 実際に行う内容は、ここには書かない
31
アブストラクトメソッドの例 アブストラクト クラス アブストラクトメソッド Test01を スーパークラス とする サブクラスTest02
abstract class Test01{ void test01(){ System.out.println("Test 01"); } abstract void test02(); class Test02 extends Test01{ void test02(){ System.out.println("Test 02"); public class Sample06b{ public static void main(String[] args){ Test02 dt01 = new Test02(); アブストラクトメソッド Test01を スーパークラス とする サブクラスTest02 必ずオーバーライド
32
インターフェース
33
インターフェースとは アブストラクトメソッドだけを宣言するための機能。
インターフェース内には、定数とアブストラクトメソッド のみを記述できる。 インターフェースに基づいたクラスを書くことができる。 このことをインターフェースを実装するという。 データのやり取りの方法を強制するので、インター フェースと呼ばれる。 クラスと異なり、2つのインターフェースを、1つのクラ スに同時に実装できる。
34
インターフェースの書き方 書式: interfaceの中では、記号定数の宣言とアブストラクト メソッドしか書くことができません。
interface interface名{ 記号定数の宣言 アブストラクトメソッド } interfaceの中では、記号定数の宣言とアブストラクト メソッドしか書くことができません。
35
クラスの書き方 その1 このインターフェースに基づいたクラスを書くことを、 インターフェースを実装すると言います。
このインターフェースに基づいたクラスを書くことを、 インターフェースを実装すると言います。 インターフェースを実装するには、次のように書きます。 書式: class クラス名 implements interface名{ 省略 } アブストラクトメソッドは、クラス内でオーバーライドする 必要があります。
36
クラスの書き方 その2 2つ以上のインターフェースを同時に実装できます。 書式:
class クラス名 implements interface名,interface名{ 省略 } , で区切って、インターフェース名を実装したいだけ繋げ ます。
37
クラスの書き方 その3 クラスを継承し、さらにインターフェース実装できます。 書式:
class クラス名 extends クラス名 implements interface名{ 省略 }
38
クラスの拡張とインターフェース クラスを拡張するとき、スーパークラスとして利用できる のは、ただ1つだけ。
インターフェースは、複数を同時に利用できる。 普通の拡張 クラス クラス その1 2つのスーパークラスは持てない クラス クラス その2 インターフェースと スーパークラスは同時にもてる クラス インターフェース その1 クラス インターフェースは2つ同時でもOK インターフェース その2 クラス
39
インターフェースの例 インターフェース インターフェースを 実装したクラス interface InterTest01{
double root_2 = ; void test01(double ddt); } class Test02 implements InterTest01{ public void test01(double ddt){ System.out.println(ddt*root_2); public class Sample07a{ public static void main(String[] args){ Test02 dt01 = new Test02(); dt01.test01(100.0); インターフェース インターフェースを 実装したクラス インスタンスを生成。 メソッドを実行。
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.