LoginSignup
0
0

More than 3 years have passed since last update.

【初心者】Java 練習問題後の気を付ける点/継承/抽象メソッド【備忘録26】

Posted at

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の学習に一度移る。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0