##Java練習(オブジェクト指向)
###カプセル化
「private」でインスタンスフィールドを書いた際に
ゲッターで書き漏れる事があり、エラーが発生したので
癖づけて書くように気を付ける。
###printData
・指示がなくても、自分から出力用のインスタンスメソッドを
書けるようにする。誰が見ても見やすい書き方を心がけていきたい。
・privateで書いた後、Main.javaで出力するのではなく
printDataで出力をまとめる場合は、同じクラス内なので、getNameなどでなく
this.nameなどで書くと、簡潔に書けるので覚えておく。
##Java学習
###継承
今までの演習で2つのクラスを使って進めたりしていたが
クラス内でコードの重複するところがあった。
修正・改善がしにくくなってしまうので重複は避けるべき。
その際、1つのクラスの内容を引き継ぐ方法がとれる。
これを継承という。
元になるクラスを「スーパークラス」と呼び
継承される側のクラスを「サブクラス」と呼ぶ。
###継承する方法
サブクラスにて、初めに定義する際に
class サブクラス名 extends スーパークラス名{...
というような形で書く。
class Vehicle{
...
public void setName(String name){...
}
public void setColor(String color){...
}
}
//Main.javaにて
class Main{
public static void main(String[]args){
Car car = new Car();
car.setName("フェラーリ");
car.setColor("赤");
...
}
}
実際にメソッドを呼び出す際などは上記のようにして書く。(一例)
###サブクラスをカスタマイズする
今までで使用していたCarクラスの燃料部分(fuel)は他のクラスにはない
独自の物なので、Carクラスにてカスタマイズを行わなければならない。
class Car extends Vehicle{
private int fuel = 50;
public int getFuel(){
return this.fuel;
}
実際に呼び出す際はcar.getFuel();で呼び出す。
(vehicle.getFuel();ではエラーが出る)
###super()
スーパークラスのコンストラクタをサブクラスで呼び出す方法
【例1】
//スーパークラス
class Vehicle{
Vehicle(){
System.out.println("スーパークラスです");
}
//Carクラス
class Car extends Vehicle{
Car(){
super();
}
}
//Mainクラス
class Main{
public static void main(String[]args){
Car car = new Car();
...
}
}
上記で、出力は「スーパークラスです」となる。
【例2】
//スーパークラスにて、まずコンストラクタを定義。
class Vehicle{
private String name; ...
Vehicle(String name,String color){
this.name = name;
this.color = color;
}
//Carクラスのコンストラクタ/スーパークラスのコンストラクタを呼び出す
class Car extends Vehicle{
Car(String name,String color){
super(name,color); //引数を渡し忘れないようにする。
}
}
###protected
スーパークラス、サブクラスを使う際
今までと同じようにprivateを使っているフィールドに関しては
サブクラスからのアクセスがそのままでは出来ない。
ゲッター・セッターを使っていたが、[protected]を用いると
サブクラスとクラス内からのアクセスが可能になる。
・public →どこからでもアクセス可能
・private →そのクラスからのみアクセス可能
・protected →そのクラスとサブクラスからアクセス可能
###抽象メソッド
今まで、乗り物のスーパークラスで車や自転車のサブクラスを
まとめていたが、中身がそれぞれ違う(例えばrunクラス)メソッドがある際は
抽象メソッドを使う。
class Vehicle{ ..
abstract public void run(int distance);
//ここで抽象メソッドを定義する。そのあとの処理は書かない!
その後、各サブクラスで、上書き必須。
※抽象メソッドを持つクラスは「抽象クラス」となるため
クラス名の前に「abstract」を付ける必要がある。
##今後
抽象メソッドなど実際に書いていないので、理解が浅い気がする。
一度Javaの総復習をして、ページとして作れたらと思います。
諸事情でPHPも早急に触った方が良い状況なので、その前にPHPの学習に一度移る。