ITスクール DAY18 OOP/ネストクラス/匿名クラス

2023/08/02に公開

OOP

継承(IS~A) : is a (一般化、拡張)

Aは Bの中で一つ
Aは Bを継承
Aは Bのサブクラス
Aは Bの属性を継承する。
例)
Apple is-a Fruit → リンゴは果物だ。

抽象クラス : is a kind of(~の一種類)

抽象メソッドがある場合は、メソッドの定義が宣言されていないため、
継承するクラスが再定義する必要がある。
主にスパクラスの役割を担当する。(抽象クラス同士も継承ができる。)

インタフェース : be able to

Aは Bをする
Aは Bができる

例)
人間は死んだら、腐る。
プラスチックは腐る。

➞Decable interface!

フィールドをもっていない。(定数はある)
インタフェースはインタフェースを多重継承することができる。
クラスはインタフェースを多重具象することができる。
基本的にpublicだ

void go();
[public abstract] void go;

default jump(){System.out.print("jump");}
[public] default jump(){System.out.print("jump");}

ネストクラス

Non-static InnerClassは、基本的にprivateで、宣言するが、アクセス修飾子をpublic, defaultにする場合は、このようにアクセスすることもできるようだ。
匿名クラスのように、イベント処理でよく使われる。

package oop20230802;

class WebProgram {
String title = "Java Programming";
class Language{
	String basic = "Java, HTML, JavaScript";
	void disp() {
		System.out.println("기초수업: " + basic);
	}
    }
class Smart{
	String basic = "Object-C";
	void disp() {
		System.out.println("기초수업: " + basic);
	}
    }
}

public class InnerClassEx1 {

public static void main(String[] args) {
	//#inner class 
	// JS -> jQuery, Ajax (主に、JSとAndroidのイベントに活用する)
		

	WebProgram web= new WebProgram();
	System.out.println(web.title);
		
	WebProgram.Language lang = new WebProgram().new Language();
	System.out.println(lang.basic);
	lang.disp();
		
	WebProgram.Smart sma = new WebProgram().new Smart();
	System.out.println(sma.basic);
	sma.disp();
	
	}
	
}
Java Programming
Java, HTML, JavaScript
기초수업: Java, HTML, JavaScript
Object-C
기초수업: Object-C

個人的に意見を言えば、外部に情報を隠し、カプセル化のためにprivateに宣言することが目的だと思うが、.アクセスできるようになることはすこし目的にずれる気もする。

結局、重要なポイントは継承のように、外部クラスのオブジェクトが存在しないかぎり、内部クラスのオブジェクトの生成もできないことだ。

https://zenn.dev/eldorado215/articles/a7a2792d5926db

以前、privateに宣言したInner Classの情報もあるため、こちらにURLを添付する。

匿名クラス

特定インタフェースをメインですぐ宣言し、匿名クラスを宣言してから、その場でオーバーライドすることもできる。
主にイベントのようなアンドロイドのUIで活用される。

AnonymousEx1

interface IMessage {
    void msgPring();
}

public class AnonymouClassEx1 {

public static void main(String[] args) {
	
	//Anonymousを込めるインタフェース変数を作成
    IMessage message = new IMessage() { 
	@Override
	public void msgPring() {
	    System.out.println("===Anonymous===");		
	    }	
	 };
	 
	 message.msgPring();
	 
				
    } // main() end

}

===Anonymous===

より詳しい、まとめ情報はこちらから参考できる。

https://zenn.dev/eldorado215/articles/44b1777c0eb644

Discussion