package lecture.etc;
import jp.avaj.lib.debug.L;
/**
* 無名(匿名)クラス Java
*
* 処理をしたいその場でクラスを定義してメソッドを呼び出す方法
* 同じ処理が他では必要がない場合に便利
* また無駄にクラスが増えない
*
* 無名(匿名)クラスの定義方法とメソッドの呼び出しは以下の組合せがあるが、
* 特に利点・欠点はない
*
* 無名(匿名)クラスの定義方法
* 1.Objectクラスを元にする
* 2.インターフェースを元にする
* 3.抽象クラスを元にする
* 4.具象クラスを元にする
*
* 実行するメソッド
* 1.元のクラスにあるメソッドを再定義する
* 2.元のクラスにないメソッドを定義する
*/
class AnonymousClass {
public static void main(String[] args) {
//
// 1.Objectクラスを元にする + 2.元のクラスにないメソッドを定義する
(new Object(){
public void printString() {
L.p("hello");
}
}).printString();
//
// 2.インターフェースを元にする + 1.元のクラスにあるメソッドを再定義する
(new If() {
public void printString() {
L.p("hello");
}
}).printString();
//
// 2.インターフェースを元にする + 2.元のクラスにないメソッドを定義する
(new If() {
public void printInt() {
L.p(5);
}
// こちらも定義することが必要
public void printString() {
// 処理なし
}
}).printInt();
//
// 3.抽象クラスを元にする + 1.元のクラスにあるメソッドを再定義する
(new AbstractClass() {
public void printString() {
L.p("hello");
}
}).printString();
//
// * 抽象クラスを元にする + 2.元のクラスにないメソッドを定義する
(new AbstractClass() {
public void printInt() {
L.p(5);
}
// こちらも定義することが必要
public void printString() {
// 処理なし
}
}).printInt();
//
// 4.具象クラスを元にする + 1.元のクラスにあるメソッドを再定義する
(new ConcreteClass() {
public void printString() {
L.p("hello");
}
}).printString();
//
// 4.具象クラスを元にする + 2.元のクラスにないメソッドを定義する
(new ConcreteClass() {
public void printInt() {
L.p(5);
}
}).printInt();
}
public interface If{
public void printString();
}
public static abstract class AbstractClass {
public abstract void printString();
}
public static class ConcreteClass {
public void printString() {
// 処理なし
}
}
}
//---------------------------------------------------
//・目次 Javaエトセトラ
// http://blogs.yahoo.co.jp/artery2020/40576157.html
//・目次 - Java入門
// http://blogs.yahoo.co.jp/artery2020/39975776.html
//・目次 - ビジネスパーソンの常識と非常識
// http://blogs.yahoo.co.jp/artery2020/39728331.html
//・目次 - 論理・発想・思考についての考察と鍛え方
// http://blogs.yahoo.co.jp/artery2020/39657784.html
//---------------------------------------------------
import jp.avaj.lib.debug.L;
/**
* 無名(匿名)クラス Java
*
* 処理をしたいその場でクラスを定義してメソッドを呼び出す方法
* 同じ処理が他では必要がない場合に便利
* また無駄にクラスが増えない
*
* 無名(匿名)クラスの定義方法とメソッドの呼び出しは以下の組合せがあるが、
* 特に利点・欠点はない
*
* 無名(匿名)クラスの定義方法
* 1.Objectクラスを元にする
* 2.インターフェースを元にする
* 3.抽象クラスを元にする
* 4.具象クラスを元にする
*
* 実行するメソッド
* 1.元のクラスにあるメソッドを再定義する
* 2.元のクラスにないメソッドを定義する
*/
class AnonymousClass {
public static void main(String[] args) {
//
// 1.Objectクラスを元にする + 2.元のクラスにないメソッドを定義する
(new Object(){
public void printString() {
L.p("hello");
}
}).printString();
//
// 2.インターフェースを元にする + 1.元のクラスにあるメソッドを再定義する
(new If() {
public void printString() {
L.p("hello");
}
}).printString();
//
// 2.インターフェースを元にする + 2.元のクラスにないメソッドを定義する
(new If() {
public void printInt() {
L.p(5);
}
// こちらも定義することが必要
public void printString() {
// 処理なし
}
}).printInt();
//
// 3.抽象クラスを元にする + 1.元のクラスにあるメソッドを再定義する
(new AbstractClass() {
public void printString() {
L.p("hello");
}
}).printString();
//
// * 抽象クラスを元にする + 2.元のクラスにないメソッドを定義する
(new AbstractClass() {
public void printInt() {
L.p(5);
}
// こちらも定義することが必要
public void printString() {
// 処理なし
}
}).printInt();
//
// 4.具象クラスを元にする + 1.元のクラスにあるメソッドを再定義する
(new ConcreteClass() {
public void printString() {
L.p("hello");
}
}).printString();
//
// 4.具象クラスを元にする + 2.元のクラスにないメソッドを定義する
(new ConcreteClass() {
public void printInt() {
L.p(5);
}
}).printInt();
}
public interface If{
public void printString();
}
public static abstract class AbstractClass {
public abstract void printString();
}
public static class ConcreteClass {
public void printString() {
// 処理なし
}
}
}
//---------------------------------------------------
//・目次 Javaエトセトラ
// http://blogs.yahoo.co.jp/artery2020/40576157.html
//・目次 - Java入門
// http://blogs.yahoo.co.jp/artery2020/39975776.html
//・目次 - ビジネスパーソンの常識と非常識
// http://blogs.yahoo.co.jp/artery2020/39728331.html
//・目次 - 論理・発想・思考についての考察と鍛え方
// http://blogs.yahoo.co.jp/artery2020/39657784.html
//---------------------------------------------------