SlideShare a Scribd company logo
1 of 95
Download to read offline
未経験者のためのJava勉強会
第6回
エンジニアカフェ
エンジニアやエンジニアに関わる人、エンジニアを目指す人をサポートする施設です。
エンジニアカフェ外観(提供:福岡市) イベントの様子 コワーキングスペース
Event Co-Working&Meeting Consulting Cafe&Bar
エンジニアカフェで体験できること
自己紹介
● 今吉佑介
● 大学生
● Java , Ruby
もくじ
● 継承について
● 抽象クラス
継承について
すでに定義されているクラスを元に
新しいクラスを作成する事
画面に時間を表示する時計クラスを作ることを考えてみましょう
この時計クラスは好みに合わせてデジタル時計やアナログ時計の様に
表示する事ができるとしましょう。
時計クラス
・時刻の設定
・アラーム
・時、分、秒の管理
アナログ時計
デジタル時計
デジタル時計とアナログ時計は表示形式が違うだけで、現在時刻を表示したり
アラームなどの設定も行っています
時計クラスから「アナログ時計」「デジタル時計」を継承しているとなります
継承によって作られたクラスをサブクラスと呼び
継承元になっているクラスをスーパークラスと呼びます
時計クラス
・時刻の設定
・アラーム
・時、分、秒の管理
アナログ時計
デジタル時計
スーパークラス
サブクラス
サブクラス
継承を行うことによって出来ること
・既存の機能はそままで新しい機能を追加できる
・既存の機能の名前のまま新しい振る舞いを定義できる
・既存の機能に処理を追加して拡張できる
なぜ継承を使うのか?
継承を用いることによって、コードの追加、
修正といったメンテナンスが容易になったり、
既存のコードの使いまわしやすくなるなどの
メリットがあるから
継承は同じ様な機能を持つクラスを複数作る際に便利
既存のコードを再利用する事ができる仕組み
つまり継承は...
Studentクラスを用いて継承を体験しましょう
先ほどのクラスではprivateで
名前、年齢、学校名を定義しています
Mainクラスを作成して先ほどの
Studentクラスをインスタンス化しましょう
Mainクラスを実行してみましょう
コマンドラインで下記
二つを実行してください
私の場合実行結果はこの様になりました
先ほどのStudentクラスをに継承を行います
Human(人間)クラスをStudent(生徒)クラスへ継承する
Studentクラス Humanクラス
継承!
名前
年齢
学校名
Humanクラスに名前と年齢を持たせて
Studentクラスに継承させる
スーパークラス(親クラス)である
Humanクラスを作成しましょう
Humanクラスに名前と年齢を定義します
StudentクラスにHumanクラスを継承しましょう
extendsを使用して継承を行う事ができます
記述方法
StudentクラスにHumanクラスを継承するので
次の様に記述します
これで継承を行いました
継承後のStudentクラスを定義しましょう
Humanクラスに記述している部分を省略できる
親クラスに記述されている部分
age,name変数
age,nameメソッド
を省略することができる
Humanクラスに記述している部分を
削除した物が次になります
これで継承が完了です
継承の原則
継承には「is - a の原則」というルールがあります
子クラスは親クラスの一部である
子クラス is - a 親クラス
今回の場合は Student is - a Human
Student は Human の一部であるとなる
気をつけて頂きたいのは
Human is - a Student とならない様にしてください
この場合だと HumanクラスがStudentクラスの一部という意味になっています
間違った継承
間違った継承として
is - a の関係がないのにも関わらず
継承してしまうのが間違った継承です
is - a が成り立つか考えて継承を行いましょう
子クラスになるほど「特殊で具体的なものに」
具体化(特化)していく
親クラスになるほど「一般的で、抽象的・あいまいなものに」
一般化(凡化)していく
抽象クラス
今回までは予め処理の決まったクラス、
メソッドを呼び出して実行していましたが、
処理の決まっていないクラス、
メソッドを定義しそれを呼び出します
抽象クラスとは?
抽象クラスは、通常のクラス(具象クラス)とは違い
具体的な処理は記述しない
継承後のクラスで具体的な処理を記述する
抽象クラスの記述方法
抽象クラスは通常のメソッドと
抽象メソッドを定義することが可能です
抽象メソッドとは?
現時点で何をするか確定できていないメソッド
継承を行ったクラスで
処理を追加しなければならない
抽象メソッドの記述方法
抽象メソッドのworkを定義するとなるとこの様になります
質問
手を動かしながら抽象クラス、
抽象メソッドを記述しましょう!
お好きなテキストエディタを開いてください!
今から作成するプログラムは、会社員が出社、仕事、帰宅を行う
プログラムです
Employeeファイルを作成して
abstractでEmployeeを定義しましょう
・protected変数を定義
・抽象メソッドを定義
・通常のメソッドを定義します
・コマンドラインに社員の出社と帰宅を表示させます
注意点
抽象クラスはインスタンス化することができない
抽象クラスをインスタンス化しようとすると ...?
コマンドプロンプトでこの様にエラーが表示されます
抽象クラスを継承しましょう
今回は開発者クラス(Development)に継承します
Developerファイルを作成して
Employeeクラスを継承したDeveloperを定義します
Sampleクラスファイルを作成して
Developerクラスをインスタンス化させましょう
Sampleクラスファイルを作成しましょう
先ほどのSampleクラスにDeveloperクラスをインスタンス化さてましょう!
親クラスで定義したgoOfficeメソッドとgoHomeメソッドを呼び出してみましょう!
コマンドラインでSampleファイルを実行しましょう!
実行結果はこの様になりました!
抽象クラスEmployeeの下線部のメソッドを呼び出しました
抽象メソッドのworkメソッドをまだ呼び出していませんので、呼び出してみましょう!
下線部で抽象クラスの workメソッドを呼び出してみてください!
コンパイラを通してみましょう!
この様にエラーが出力されます!
抽象メソッドを使用する場合は抽象メソッドを
オーバーライドする必要があります!
下線部様にオーバーライドを行い再度コンパイルしましょう!
コンパイルが通り出力されました!
まとめ
・継承クラスはインスタンス化できない
・継承メソッドはオーバーライドしないと使用できない
質問
ありがとうございました!
エンジニアカフェでは
随時ご相談を受け付けております!
本日のイベントに関するご質問はもちろん
エンジニアに関するご相談・ご質問はお気軽にどうぞ!
・勉強の仕方を教えて欲しい
・学生でも参加しやすいコミュニティが知りたい
・子どもにおすすめのプログラミング教材ってある?
・3Dプリンタでこんなの作れる?
などなど!
スタッフやコミュニティマネージャーがオフライン・オンライン問わず
ご対応致します。

More Related Content

Similar to Java6

2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリークtorutk
 
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX UpdateJavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX UpdateTakashi Aoe
 
PWA aruaru
PWA aruaruPWA aruaru
PWA aruarun_harada
 
ジョイ・インク 役職も部署もない全員主役のマネジメント
ジョイ・インク 役職も部署もない全員主役のマネジメントジョイ・インク 役職も部署もない全員主役のマネジメント
ジョイ・インク 役職も部署もない全員主役のマネジメントYasui Tsutomu
 
LODEO開発ストーリー
LODEO開発ストーリーLODEO開発ストーリー
LODEO開発ストーリーTomohiro Shinden
 
AngularJSのDirectiveで俺俺タグつくっちゃお
AngularJSのDirectiveで俺俺タグつくっちゃおAngularJSのDirectiveで俺俺タグつくっちゃお
AngularJSのDirectiveで俺俺タグつくっちゃおToshio Ehara
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?好洋 山崎
 
ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてKota Mizushima
 
Arduino勉強会用スライド
Arduino勉強会用スライドArduino勉強会用スライド
Arduino勉強会用スライドsatonorisan
 
20161119 java one-feedback_osaka
20161119 java one-feedback_osaka20161119 java one-feedback_osaka
20161119 java one-feedback_osakaTakashi Ito
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~normalian
 
知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナー知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナーukkyo
 
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...Rescale Japan株式会社
 
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうKaz Aiso
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springkounan13
 
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方ikikko
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入You&I
 
Iccv2019 参加報告
Iccv2019 参加報告Iccv2019 参加報告
Iccv2019 参加報告Yuta Nakagawa
 
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdateYuki Iwanari
 

Similar to Java6 (20)

2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリーク
 
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX UpdateJavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
 
PWA aruaru
PWA aruaruPWA aruaru
PWA aruaru
 
ジョイ・インク 役職も部署もない全員主役のマネジメント
ジョイ・インク 役職も部署もない全員主役のマネジメントジョイ・インク 役職も部署もない全員主役のマネジメント
ジョイ・インク 役職も部署もない全員主役のマネジメント
 
LODEO開発ストーリー
LODEO開発ストーリーLODEO開発ストーリー
LODEO開発ストーリー
 
AngularJSのDirectiveで俺俺タグつくっちゃお
AngularJSのDirectiveで俺俺タグつくっちゃおAngularJSのDirectiveで俺俺タグつくっちゃお
AngularJSのDirectiveで俺俺タグつくっちゃお
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
 
ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
 
system testing in Scrum
system testing in Scrumsystem testing in Scrum
system testing in Scrum
 
Arduino勉強会用スライド
Arduino勉強会用スライドArduino勉強会用スライド
Arduino勉強会用スライド
 
20161119 java one-feedback_osaka
20161119 java one-feedback_osaka20161119 java one-feedback_osaka
20161119 java one-feedback_osaka
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
 
知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナー知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナー
 
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
 
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 spring
 
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入
 
Iccv2019 参加報告
Iccv2019 参加報告Iccv2019 参加報告
Iccv2019 参加報告
 
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
 

Java6