Java基礎(chǔ)系列之內(nèi)部類的多重繼承與事件回調(diào)

首先說為什么要使用內(nèi)部類:

1、實(shí)現(xiàn)多重繼承

2、實(shí)現(xiàn)閉包(隱藏關(guān)鍵環(huán)節(jié))

3、回調(diào)

常見內(nèi)部類類型

1、非靜態(tài)內(nèi)部類

public class NoStaticInsideClass {
private @Setter String name;
private @Setter int age;

class UserAction{
public void call() {
System.out.println(name + " "+age);
}
}

? public static void main(String[] args) {
NoStaticInsideClass ni = new NoStaticInsideClass();
ni.setName("張三");
ni.setAge(18);
UserAction ua = ni.new UserAction();
ua.call();
}
}

?2、靜態(tài)內(nèi)部類

public class StaticInsideClass {    
private static String name;
private static int age;
static class UserAction{
public void call() {
System.out.println(StaticInsideClass.name + " "+StaticInsideClass.age);
}
}

public static void main(String[] args) {
StaticInsideClass.name = "張三";
StaticInsideClass.age = 18;
UserAction ua = new StaticInsideClass.UserAction();
ua.call();
}
}

?3、匿名內(nèi)部類

public class AnonymousInsideClass {    
private @Setter String name;
private @Setter int age;
UserAction ua = new UserAction(){
public void call() {
System.out.println(name + " "+age);
}
};

public static void main(String[] args) {
AnonymousInsideClass ni = new AnonymousInsideClass();
ni.setName("張三");
ni.setAge(18);
ni.ua.call();
}
}

實(shí)戰(zhàn)

1、利用內(nèi)部類實(shí)現(xiàn)多重繼承

class Father {    
public String name() {
return "張";
}
}

class Mather {
public String face() {
return "白色";
}
}

public class Child extends Father {
class Child2 extends Mather{
public String childPeculiarity(){
return "繼承了爸爸的姓("+name() + ")和媽媽的皮膚("+face()+")";
}
}

public static void main(String[] args) {
System.out.println("兒子的特點(diǎn)是:" + new Child().new Child2().childPeculiarity());
}
}

2、?利用內(nèi)部類模擬按鈕事件(Swing、RCP、Android等)

public interface BtnClickListener {    
public void call();
}

public class Button {
public void addClickListener(BtnClickListener event) {
event.call();
}
}

public class UserClick {
/*** 匿名內(nèi)部類 */
BtnClickListener bl = new BtnClickListener() {
@Override
public void call() {
System.out.println("當(dāng)用戶點(diǎn)擊了按鈕后,執(zhí)行了此方法");
}
};

public static void main(String[] args) {
new UserClick().triggerClick();
}

/*** 模擬觸發(fā)按鈕事件 */
public void triggerClick() {
new Button().addClickListener(bl);
}
}

?

相信我們,加入我們
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容