Java学習3日目
【三日目】Java学習
1. static変数、staticメソッド
・全インスタンス変数が使えるメンバ変数やメソッドを定義するには、staticを指定する。
・オブジェクトを生成していなくても利用できる
→クラス名.変数[メソッド]名と記述
使いどころ
①全部のインスタンスから共通して使う変数やメソッドを作りたいとき
②クラスの関連する便利なメソッドをまとめたいというようなとき
・オブジェクトを生成していなくても利用できる
→クラス名.変数[メソッド]名と記述
使いどころ
①全部のインスタンスから共通して使う変数やメソッドを作りたいとき
②クラスの関連する便利なメソッドをまとめたいというようなとき
2. カプセル化
・アクセス修飾子でクラス・メンバ変数、メソッドの公開範囲を指定できる
・メンバ変数は隠蔽(private)してクラスとメソッドは公開(public)する設計方針をカプセル化と呼ぶ。
メリット
①代入前処理ができるようになる。(不正な値が入るのを防ぐ)
②修正範囲を限定出来てメンテナンスしやすくできる
・メンバ変数は隠蔽(private)してクラスとメソッドは公開(public)する設計方針をカプセル化と呼ぶ。
メリット
①代入前処理ができるようになる。(不正な値が入るのを防ぐ)
②修正範囲を限定出来てメンテナンスしやすくできる
3. 継承
・継承とは既存のクラスをもとに変数やメソッドを追加したクラスを作ること
継承関係にある親のクラスをスーパークラス。子のクラスをサブクラスという。
メリット:コーディング、メンテナンスが楽
・継承できるクラスは1つだけ
・コンストラクタは継承しない
例
class Student extends Person(スーパークラス名) {
}
継承関係にある親のクラスをスーパークラス。子のクラスをサブクラスという。
メリット:コーディング、メンテナンスが楽
・継承できるクラスは1つだけ
・コンストラクタは継承しない
例
class Student extends Person(スーパークラス名) {
}
4. オーバーライド
サブクラスでスーパークラスのメソッドを再定義すること
条件:戻り値の型、メソッド名、引数の型と数が全て同じ
thisとsuperによるメンバ変数・メソッドの呼び出し
this.~ = (自オブジェクトの~)
super.~ =(スーパークラスの~)
メリット
①同じコードを書かなくてよい
②引数名を考えなくてよい
→プログラムを自動的に組めるようになる
super(引数)(スーパークラス)
・this(~)super(~)はコンストラクタ内の先頭に記述
(なければ自動的にsuper();が挿入される)
これで最後の意味
クラス:継承ができなくなる
全体の整合性があわなくて継承してほしくないときに使う
例:final class Student {
メンバ変数:代入ができなくなる
定数を作れる
定数名はすべて大文字
メソッド:オーバーライドができなくなる
自動で行われる→スーパー=サブのとき
キャストで明示する→サブ=スーパーのとき
②共通点まとめ
条件:戻り値の型、メソッド名、引数の型と数が全て同じ
thisとsuperによるメンバ変数・メソッドの呼び出し
this.~ = (自オブジェクトの~)
super.~ =(スーパークラスの~)
メリット
①同じコードを書かなくてよい
②引数名を考えなくてよい
→プログラムを自動的に組めるようになる
thisとsuperによるコンストラクタの呼び出し
this(引数) (自オブジェクト)super(引数)(スーパークラス)
・this(~)super(~)はコンストラクタ内の先頭に記述
(なければ自動的にsuper();が挿入される)
finalキーワード
・クラス、メンバ変数、メソッドにつけられる修飾子これで最後の意味
クラス:継承ができなくなる
全体の整合性があわなくて継承してほしくないときに使う
例:final class Student {
メンバ変数:代入ができなくなる
定数を作れる
定数名はすべて大文字
メソッド:オーバーライドができなくなる
参照型の型変換
・継承下院系にあるクラス年でオブジェクトの型変換が自動で行われる→スーパー=サブのとき
キャストで明示する→サブ=スーパーのとき
2種類の継承
①機能追加②共通点まとめ
5. 抽象クラスとポリモフィズム
・実装内容を持たないメソッドを抽象メソッドと呼び、abstractをつける
・抽象メソッドをもつクラスを抽象クラスと呼びabstractをつける
インスタンス化は不可
・Studentクラスのメソッドはclubオブジェクトによって異なる処理
=ポリモフィズム(多態性)
・抽象メソッドをもつクラスを抽象クラスと呼びabstractをつける
インスタンス化は不可
・Studentクラスのメソッドはclubオブジェクトによって異なる処理
=ポリモフィズム(多態性)
6. 本日使用したサンプルコード
【オーバーロード、コンストタクタの復習】
class Student{
//メンバ変数(属性)
String name;
int engScore;
int mathScore;
//メソッド(操作)
void display() {
System.out.println(name + "さん");
System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
}
void setScore(int eng, int math) {
engScore =eng;
mathScore = math;
}
double getAvg() {
double avg = (engScore + mathScore) /2.0;
return avg;
}
}
class StuSample {
public static void main (String[] args) {
Student stu1 = new Student();
stu1.name = "菅原";
stu1.setScore(90, 80);
stu1.display();
System.out.println("平均" + stu1.getAvg() + "点");
}
}
class Car{
//メンバ変数(属性)
int no;
int speed;
void setNo(int n) {
no =n;
}
void run(int s) {
speed =s;
}
void stop() {
speed =0;
}
//メソッド(操作)
void display() {
System.out.println("ナンバー" + no + "の速度は" + speed + "です");
}
}
class DriveCar{
public static void main(String[] args) {
Car c1 = new Car();
c1.setNo(2525);
c1.run(30);
c1.display();
c1.stop();
c1.display();
}
}
class Student2{
//メンバ変数(属性)
String name;
int engScore;
int mathScore;
void setData(String n) {
name =n;
}
void setData(String n,int e, int m) {
name =n;
engScore = e;
mathScore = m;
}
void setScore(int e, int m) {
engScore =e;
mathScore = m;
}
//メソッド(操作)
void display() {
System.out.println(name + "さん");
System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
}
}
class Student{
//メンバ変数(属性)
String name;
int engScore;
int mathScore;
//メソッド(操作)
void display() {
System.out.println(name + "さん");
System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
}
void setScore(int eng, int math) {
engScore =eng;
mathScore = math;
}
double getAvg() {
double avg = (engScore + mathScore) /2.0;
return avg;
}
}
class StuSample {
public static void main (String[] args) {
Student stu1 = new Student();
stu1.name = "菅原";
stu1.setScore(90, 80);
stu1.display();
System.out.println("平均" + stu1.getAvg() + "点");
}
}
class Car{
//メンバ変数(属性)
int no;
int speed;
void setNo(int n) {
no =n;
}
void run(int s) {
speed =s;
}
void stop() {
speed =0;
}
//メソッド(操作)
void display() {
System.out.println("ナンバー" + no + "の速度は" + speed + "です");
}
}
class DriveCar{
public static void main(String[] args) {
Car c1 = new Car();
c1.setNo(2525);
c1.run(30);
c1.display();
c1.stop();
c1.display();
}
}
class Student2{
//メンバ変数(属性)
String name;
int engScore;
int mathScore;
void setData(String n) {
name =n;
}
void setData(String n,int e, int m) {
name =n;
engScore = e;
mathScore = m;
}
void setScore(int e, int m) {
engScore =e;
mathScore = m;
}
//メソッド(操作)
void display() {
System.out.println(name + "さん");
System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
}
}
7. まとめ
今回もひたすらサンプルコードを書きつつオブジェクト指向について理解を深めていきました。
ポリモフィズム関連の学習について理解が追い付かない箇所があったため、次回に向けてしっかり復習しておきます。