Java勉強します
今職場でJavaの勉強をしているので知識の定着も含めて書いていきたいと思います。
目次
1.Javaとは
2.コンストラクタとは
3.継承とは
4.オーバーライド
2.コンストラクタとは
3.継承とは
4.オーバーライド
Javaとは
Javaとはプログラミング言語の1つです。
今の職場ではJavaとLinuxを使用していますが自分が今まで使っていたのはCだったので今のところどんな感じかがわからないですw
このプログラミング言語は世界的に見ても多く使用されている言語のようです。
なぜ、人気が高いのかっていうのを調べてみると1.「多くの現場で使われているらしい」
2.「凡用的でOSに依存しないらしい」
ということがわかった
1はまあ今現場で使うことになったのでそうなんだろうな~とは思う
2はプログラミング言語ってOSに依存するものってなにがあったんかな
コンストラクタとは
コンストラクタとは、クラスからオブジェクトを作成した時に自動的に実行されるメソッドのことを言います。
メンバ変数の初期化などを主にやっているやつ
例えば
class A{
int a, b, c;
A(){ // A()はクラスと同名 ここから
. |
. |
. |
} ここまでがコンストラクタ
}
class TestA{
.
.
.
A a = new A(); オブジェクトの生成 = コンストラクタの呼び出し
}
みたいな感じになるみたいだ
コンストラクタにはデフォルトのコンストラクタというものがある
これはコンストラクタを記述しなかった場合に、引数なしのコンストラクタが自動的に用意されることらしい
class Book{
…
Book(){
}
// 上のオレンジ色の部分がデフォルトコンストラクタで自動的に用意されている部分
// 実際には書いていない
}
こんな感じにnewで新しくオブジェクトを作成したときに呼び出したものが初期化を基本的にする形になるからオブジェクトの生成をして最初に呼び出すものがコンストラクタと呼ばれるらしい
継承とは
例としてクラスを2つ作成してみます。
class carA{
public void accele(){
}
public void brake(){
}
public void hybrid(){
}
}
--------------------------------------------------------------------------------------------
class carB{
public void accele(){
}
public void brake(){
}
public void hybrid(){
}
}
--------------------------------------------------------------------------------------------
こんな感じのcarAとcarBはそれぞれ違う特徴があると仮定します。しかし車としての基本的な機能は同じになります。2つのクラスをそれぞれ別々に設計すれば同じ機能があるのにいちいち同じことを書くのは面倒くさいですよねってときに使うらしい
この車としての基本的な設計部分が共有しているところはそのままに、異なる部分だけを追加して設計すれば楽になるのでそのときに基本となるクラスを「スーパークラス」というらしいです。
例えばこんな感じにスーパークラスを作ってみます。
class car{
public void accele(){
}
public void brake(){
}
}
これがスーパークラスとします
次にこれをcarAとcarBに継承して必要な部分を追加してクラスを作成します
class carA extends car{
public void hybrid(){
}
}
--------------------------------------------------------------------------------------------
class carB extends car{
public void openRoof(){
}
}
こんな感じに各クラスで追加したいものを別々に追加していきます。この時に、carAとcarBはどちらもcarクラスというスーパークラスを継承しているといいます。
またcarAとcarBはcarクラスのサブクラスといいます。
オーバーライド
あるクラスを継承したクラスを書いていくと親クラスのメンバ(※メソッド及びフィールド)をすべて引き継ぐことはできるのが継承ということは上で書きました。その時に、親クラス(スーパークラス)のメソッドをそのまま引き継ぐだけでなく親クラスのメソッドを子クラス(サブクラス)で定義しなおす(上書きする)こともできます。この親クラスで定義されているメソッドを子クラスで再定義することをオーバーライドというらしい
例えば
class Greeting{
void bye(){
System.out.println("good bye");
}
}
…
Greeting greeting = new Greeting();
greeting.bye();
…
--------------------------------------------------------------------------------------------
class Aisatsu extends Greeting{
void bye(){
System.out.println("さようなら");
}
}
…
Aisatsu aisatsu = new Aisatsu();
aisatsu.bye();
…
--------------------------------------------------------------------------------------------
こんな感じにかいたとすると
結果として出てくるのは「さようなら」になります。
extendsで継承後に継承元と同じvoid bye()で中身がgood bye から さようならと変更があるため実際に出てくる実行結果が「さようなら」となります。
この再定義されることがオーバーライドと言うらしい。